我正在编写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]
有人可以帮助我吗?
提前致谢!
答案 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