【问题标题】:Remove "img" and "a" tags from node.InnerHtml从 node.InnerHtml 中删除“img”和“a”标签
【发布时间】:2014-03-11 09:41:49
【问题描述】:

我只想从我的 html 中提取文本

var sb = new StringBuilder();
doc.LoadHtml(inputHTml);

foreach (var node in Doc.DocumentNode.ChildNodes)
{
    if (node.Name == "strong" || node.Name == "#text" 
        || node.Name == "br" || node.Name == "div" 
        || node.Name == "p" || node.Name != "img")
    {
        sb.Append(node.InnerHtml);
    }
}

现在在我的 node.InnerHtml 中是这个 html:

1.

<br><div>text</div><div>, text</div><div>text<br>
<img src="http://example.com/55.jpg" alt="" title="" height="100">
<img src="http://example.com/45.jpg" alt="text" title="text" height="100"></div>

2.

text&nbsp;text&nbsp;text.&nbsp;&nbsp;<a
 href="/content/essie-classics">text</a><br>
  <img> src="" alt="" title="" height="100"><img
 src="http://example.com/img_8862.jpg"
 alt="" title="" height="100"> 

如何去除img和a标签?

img 标签没有结束标签

【问题讨论】:

    标签: c# html html-agility-pack


    【解决方案1】:

    不确定我是否理解第 2 点的含义。但是如果你想从HtmlNode 中删除所有&lt;img&gt; 元素,你可以试试这个方法:

    var imgs = node.SelectNodes("//img");
    foreach (var img in imgs)
    {
        img.Remove();
    }
    

    Remove() 函数将从其父级中删除 HtmlNode。这对我来说可以很好地删除 &lt;img&gt; 元素,即使没有结束标记。

    更新:

    您可以使用此 XPath 表达式在单个查询中选择所有 &lt;img&gt;&lt;a&gt; 元素:

    node.SelectNodes("//*[self::img or self::a]");
    

    然后您可以遍历结果集一次以删除它们中的每一个。

    【讨论】:

      【解决方案2】:

      请参阅此remove html node(img) from htmldocument 示例。 你也可以这样做:

             var sb = new StringBuilder();
      doc.LoadHtml(inputHTml);
      
              foreach (var node in doc.DocumentNode.ChildNodes)
          {
              if (node.Name != "img" && node.Name!="a")
              {
                  sb.Append(node.InnerHtml);
              }
          }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2018-11-25
        • 2019-05-11
        • 2010-11-09
        • 2014-08-31
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多