使用HtmlAgilityPack将样式属性添加到Html的更好方法

Gen*_*e S 4 html c# html-agility-pack

我正在使用HtmlAgilityPack.我正在搜索所有P标签并在P标签内的样式中添加"margin-top:0px".

正如你所看到的那样,它有点"强制"使用margin-top属性.似乎必须有一个更好的方法来使用HtmlAgilityPack,但我找不到它,并且HtmlAgilityPack文档不存在.

谁知道更好的方法?

HtmlNodeCollection pTagNodes = node.SelectNodes("//p[not(contains(@style,'margin-top'))]");

if (pTagNodes != null && pTagNodes.Any())
{
    foreach (HtmlNode pTagNode in pTagNodes)
    {
        if (pTagNode.Attributes.Contains("style"))
        {
            string styles = pTagNode.Attributes["style"].Value;
            pTagNode.SetAttributeValue("style", styles + "; margin-top: 0px");
        }
        else
        {
            pTagNode.Attributes.Add("style", "margin-top: 0px");
        }
    }
}
Run Code Online (Sandbox Code Playgroud)


更新:我已根据Alex的建议修改了代码.仍然想知道HtmlAgilityPack中是否有一些内置功能可以以更"DOM"的方式处理样式属性.

const string margin = "; margin-top: 0px";

HtmlNodeCollection pTagNodes = node.SelectNodes("//p[not(contains(@style,'margin-top'))]");

if (pTagNodes != null && pTagNodes.Any())
{
    foreach (var pTagNode in pTagNodes)
    {
        string styles = pTagNode.GetAttributeValue("style", "");
        pTagNode.SetAttributeValue("style", styles + margin);
    }
}
Run Code Online (Sandbox Code Playgroud)

Ale*_*lex 5

您可以通过使用HtmlNode.GetAttributeValue方法简化代码,并使"margin-top"魔术字符串保持不变:

const string margin = "margin-top: 0";
foreach (var pTagNode in pTagNodes)
{
    var styles = pTagNode.GetAttributeValue("style", null);
    var separator = (styles == null ? null : "; ");
    pTagNode.SetAttributeValue("style", styles + separator + margin);
}
Run Code Online (Sandbox Code Playgroud)

这不是一个非常显着的改进,但这个代码对我来说更简单.