使用HTMLAgilityPack将节点添加到内部文本

6
问题:我需要删除所有

标签的style属性,如果它包含font-weight:bold属性,则添加标签。

例如:如果html是

SOME TEXT HERE

输出应该是:

SOME TEXT HERE

我正在使用以下代码:
var htmlDocument = new HtmlDocument();
            htmlDocument.LoadHtml(htmlPage);
            foreach (var htmlTag in attributetags)
            {
                var Nodes = htmlDocument.DocumentNode.SelectNodes("//p");
                if (Nodes != null)
                {
                    bool flag = false;
                    foreach (var Node in Nodes)
                    {
                        if (Node.Attributes["style"] != null)
                        {
                            if (Node.Attributes["style"].Value.Contains("font-weight:bold"))
                            {                                    
                               var bnode = HtmlNode.CreateNode("<b>");
                               Node.PrependChild(bnode);
                            }
                            Node.Attributes.Remove("style");                            
                        }
                    }
                }
            }

我也尝试过使用Node.InsertAfter(bcnode, Node), Node.InsertBefor(bnode, Node)
1个回答

7
HtmlDocument doc = new HtmlDocument();
doc.LoadHtml(html);
// select all paragraphs which have style with bold font weight
var paragraphs = doc.DocumentNode.SelectNodes("//p[contains(@style,'font-weight:bold')]");
foreach (var p in paragraphs)
{
    // remove bold font weight from style
    var style = Regex.Replace(p.Attributes["style"].Value, "font-weight:bold;?", "");        
    p.SetAttributeValue("style", style); // assign new style
    // wrap content of paragraph into b tag
    var b = HtmlNode.CreateNode("<b>");
    b.InnerHtml = p.InnerHtml;
    p.ChildNodes.Clear();
    p.AppendChild(b);
}

如果您想要,可以在一行中包装段落内容:

p.InnerHtml = HtmlNode.CreateNode("<b>" + p.InnerHtml + "</b>").OuterHtml;

2
@user2729272 欢迎 :) 我添加了一行语句,将段落内容包装到 b 标签中。我认为这样可读性会降低,但更加紧凑。 - Sergey Berezovskiy

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接