我有一个c#.net core 2.2应用程序,我正在尝试解析HTML页面并在其上编辑一些样式属性。
我正在使用HTML Agility Pack
在我的HTML中,我有一个具有多种样式的ID。
<td id="bannerTop" class="alert alert-warning" style="font-family: 'Helvetica Neue',Helvetica,Arial,sans-serif; box-sizing: border-box; font-size: 16px; vertical-align: top; color: #fff; font-weight: 500; text-align: center; border-radius: 3px 3px 0 0; background-color: #FF9F00; margin: 0; padding: 20px;" align="center" bgcolor="#FF9F00" valign="top">
我想将此元素命名为“ bannerTop”,然后编辑样式background-color
var htmlDoc = new HtmlDocument();
htmlDoc.LoadHtml(selectedTemplate.HtmlTemplateString);
var bannerTop = htmlDoc.GetElementbyId("bannerTop");
bannerTop.Attributes["style"].Value = "background-color: #0000FF";
但是,这将覆盖所有样式属性,如何编辑其中之一?我需要对bannerTop.Attributes["style"]
返回的字符串进行手动解析,还是HTML Agility Pack允许编辑一个样式的更简单方法?
答案 0 :(得分:0)
您需要从属性中获取样式,然后在它们上循环以手动更改样式的特定项。
我将“;”分开然后使用“:”获取名称/值对。循环遍历它们,小写名称,并在与bgcolor
相匹配的情况下更改其值。否则,将原始值附加到newStyles
。
var bannerTop = htmlDoc.GetElementbyId("bannerTop");
string oldStyle = bannerTop.Attributes["style"].Value;
string newStyles = "";
foreach (var entries in oldStyle.Split(';'))
{
var values = entries.Split(':');
if (values[0].ToLower() == "bgcolor")
{
values[1] = "#0000FF";
newStyles += String.Join(':', values) + ";";
}
else
{
newStyles += entries + ";";
}
}
bannerTop.Attributes["style"].Value = newStyles;