IXmlNode中的SelectNodes返回一个空的XmlNodeList

时间:2016-07-06 23:47:10

标签: c# xpath win-universal-app xmldocument empty-list

我正在编写Windows通用应用程序,必须解析HTML代码并使用XPath提取数据。 (我正在使用Windows.Data.Xml.Dom中的XmlDocument)

因此,当我选择一个节点(" nPostingsRoot")时,我得到一个带有一些子节点的节点。但是,当我尝试获取此单个节点的根目录中的所有标记的列表时,我得到一个空列表。 (请参阅截图)

迭代Childnodes不是一个选项,因为我后来有一些像这样的XPath字符串:/div/div/div/div[1]/div[2]/div/table/tbody/tr[2]/td/div[2]/b[1]

有人可以帮助我吗?

Screenshot

提前致谢!

2 个答案:

答案 0 :(得分:0)

屏幕截图显示了XPath /div,它会查找文档节点的div个子元素。在HTML文档中,文档节点的唯一子元素是html元素。如果您希望上下文节点的div子元素只使用路径div,如果您希望后代使用descendant::div.//div

答案 1 :(得分:0)

我同意@Martin Honnen。此外,如果您要解析Html代码,我建议您使用HtmlAgilityPack for .NetCore

当我使用XmlDocument来解析Html时,我遇到了一些问题(我必须删除或注释掉<!DOCTYPE html>才能成功解析html代码)。但是在使用HtmlAgilityPack时没有这样的问题。

要在rootNode下获取Div,您可以使用HtmlAgilityPack使用以下代码:

HtmlDocument htmlDoc = new HtmlDocument();
htmlDoc.LoadHtml(htmlStr);
HtmlNode rootNode =htmlDoc.DocumentNode.SelectSingleNode("/html/body/div");
IEnumerable<HtmlNode> collection=rootNode.Descendants("div");

或者你可以使用XPath来获取这样的子div节点:

HtmlDocument htmlDoc = new HtmlDocument();
htmlDoc.LoadHtml(htmlStr);
HtmlNode rootNode =htmlDoc.DocumentNode.SelectSingleNode("/html/body/div");
HtmlNodeCollection collection = rootNode.SelectNodes("div");

这是我的完整Demo