使用Html Agility Pack從html中獲取所有文本

c# html-agility-pack

輸入

<html><body><p>foo <a href='http://www.example.com'>bar</a> baz</p></body></html>

產量

<html><body><p>foo <a href='http://www.example.com'>bar</a> baz</p></body></html>

我知道htmldoc.DocumentNode.InnerText ,但它會給foobarbaz -我想每一個文字,並不是所有的時間。

一般承認的答案

var root = doc.DocumentNode;
var sb = new StringBuilder();
foreach (var node in root.DescendantNodesAndSelf())
{
    if (!node.HasChildNodes)
    {
        string text = node.InnerText;
        if (!string.IsNullOrEmpty(text))
            sb.AppendLine(text.Trim());
    }
}

這可以滿足您的需求,但我不確定這是否是最佳方式。也許你應該迭代DescendantNodesAndSelf以外的東西以獲得最佳性能。


熱門答案

XPATH是你的朋友:)

HtmlDocument doc = new HtmlDocument();
doc.LoadHtml(@"<html><body><p>foo <a href='http://www.example.com'>bar</a> baz</p></body></html>");

foreach(HtmlNode node in doc.DocumentNode.SelectNodes("//text()"))
{
    Console.WriteLine("text=" + node.InnerText);
}



許可下: CC-BY-SA with attribution
不隸屬於 Stack Overflow
這個KB合法嗎? 是的,了解原因
許可下: CC-BY-SA with attribution
不隸屬於 Stack Overflow
這個KB合法嗎? 是的,了解原因