從node.InnerHtml中刪除“img”和“a”標籤

c# html html-agility-pack

我想從我的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和標籤?

img標籤沒有close標籤

一般承認的答案

不確定我明白第2點是什麼意思。但是如果要從HtmlNode刪除所有<img>元素,可以嘗試這種方式:

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

Remove()函數將從其父級中刪除HtmlNode 。即使沒有關閉標記,這對我來說也可以刪除<img>元素。

更新:

您可以使用此XPath表達式在單個查詢中選擇所有<img><a>元素:

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

然後你可以迭代結果集一次以刪除它們中的每一個。


熱門答案

請參閱此從htmldocument示例中刪除html節點(img) 。你也可以這樣做:

       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);
        }
    }


Related

許可下: CC-BY-SA with attribution
不隸屬於 Stack Overflow
許可下: CC-BY-SA with attribution
不隸屬於 Stack Overflow