如何更新 HTML 样式属性

How to Update HTML Style Attribute

我有一个 c# .net core 2.2 应用程序,我正在尝试解析 HTML 页面并编辑一些样式属性。

我正在使用 HTML 敏捷包

在我的 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"] returns 的字符串,或者是否有更简单的方法让 HTML Agility Pack 允许编辑单个样式?

您需要从属性中抓取样式,然后遍历它们以手动更改样式的特定项。

我会在“;”上分裂然后 ":" 得到 name/value 对。遍历它们,将名称小写并更改值(如果匹配 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;