【问题标题】:Append a node to inner text using HTMLAgilityPack使用 HTMLAgilityPack 将节点附加到内部文本
【发布时间】:2023-03-13 06:25:02
【问题描述】:

问题:我需要删除所有<p> 标签的样式属性,如果它包含font-weight:bold 属性,则添加<b> 到它。

eg : 如果 html 是 <p style="margin-top:0pt; margin-bottom:0pt;font-weight:bold; font-weight:bold;font-size:10pt; font-family:ARIAL" align="center"> SOME TEXT HERE</p>.

输出应该是: <p align="center"> <b>SOME TEXT HERE</b></p>

我正在使用以下代码,

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)

【问题讨论】:

    标签: c# html-agility-pack


    【解决方案1】:
    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;
    

    【讨论】:

    • @user2729272 欢迎 :) 我添加了一行语句,用于将段落内容包装到 b 标记中。我认为它的可读性较差,但更紧凑
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-12-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多