我想從任何html文檔中獲取所有htmlDocument節點的所有innerText。如何遍歷所有節點而不指定節點名稱
我一直在做一些研究,但還沒有找到解決方案,我將無需指定節點名稱即可瀏覽整個文檔中的所有父節點和子節點。
我想這樣做,因爲我將使用不同的html文檔,因此指定節點名稱在此時不適用於我。
我想從任何html文檔中獲取所有htmlDocument節點的所有innerText。如何遍歷所有節點而不指定節點名稱
我一直在做一些研究,但還沒有找到解決方案,我將無需指定節點名稱即可瀏覽整個文檔中的所有父節點和子節點。
我想這樣做,因爲我將使用不同的html文檔,因此指定節點名稱在此時不適用於我。
您可以使用下面的XPath表達式得到任意的HTML文檔中的所有非空文本節點,而不必知道文檔結構:
//text()[normalize-space()]
全部工作的控制檯應用程序演示:
var html = @"<p>
<span>a1</span>
<span>a2</span>
<span>b1</span>
<span>b2</span>
</p>";
var doc = new HtmlDocument();
doc.LoadHtml(html);
var result = doc.DocumentNode.SelectNodes("//text()[normalize-space()]");
foreach (var r in result)
{
Console.WriteLine(r.InnerText);
}
輸出:
a1
a2
b1
b2
我想通了,現在... OMG它是如此簡單,首先,因爲我不知道該如何使用這些功能
HtmlDocument htmlDoc = new HtmlDocument();
htmlDoc.Load(MyIO.bingPathToAppDir("Test data/testHTML.html"));
HtmlNode j = htmlDoc.DocumentNode;
foreach (HtmlNode node in j.ChildNodes)
{
checkNode(node);
}
static void checkNode(HtmlNode node)
{
foreach (HtmlNode n in node.ChildNodes)
{
if (n.HasChildNodes)
{
checkNode(n);
}
else
{
Console.WriteLine(n.InnerText);
}
}
}
你也可以找到像這樣的所有節點:
string fsURLAddress = "http://www.external-url-sample.com/";
var loHtmlDocument = new HtmlWeb().Load(fsURLAddress);
var loHTMLNodeList = loHtmlDocument.DocumentNode.Descendants().ToList();