c# - 使用 HTMLAgilityPack 将节点附加到内部文本

标签 c# html-agility-pack

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

例如:如果 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)

最佳答案

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;

关于c# - 使用 HTMLAgilityPack 将节点附加到内部文本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18952928/

相关文章:

c# - 高级 HTML Agility Pack 使用

C# 按住键时写入文本

c# - 从 node.InnerHtml 中删除 "img"和 "a"标签

c# - 网址路由 asp.net 4 webforms - 不工作

c# - 如何提高读写大文本文件的性能?

c# - 替换双引号 html 属性中的双引号

c# - 请求被中止无法在共享主机服务器 C# 上创建 ssl/tls 安全通道

c# - 如何在 C# 中使用 HtmlAgilityPack 删除我的 HTML 字符串中的 <br> 标记?

c# - 在 Xamarin.Forms 中使用加载的触发器

c# - 使用 ASP .NET MVC Identity 应用程序对外部 API (PostgreSQL) 中的用户进行身份验证