如何更新HTML样式属性

时间:2019-04-26 13:32:49

标签: c# asp.net-core html-agility-pack

我有一个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允许编辑一个样式的更简单方法?

1 个答案:

答案 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;