2016-07-06 47 views
0

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

所以当我选择一个节点(“nPostingsRoot”)时,我得到了一个包含一些子节点的节点。但是,当我尝试获取单个节点根目录中所有标签的列表时,我得到了一个空列表。 (请参阅图)

迭代通过的childNodes是不是一种选择,因为我有一些以后的XPath字符串是这样的:/div/div/div/div[1]/div[2]/div/table/tbody/tr[2]/td/div[2]/b[1]

有人能帮助我吗?

Screenshot

提前感谢!

+0

请在帖子中提供[MCVE]。 –

回答

0

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

0

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

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

为了获得股利的根节点下,你可以使用使用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