2016-08-25 75 views
0
<html> 
<body> 
<div id="orders"> 
<div> 
    <div> 
    <div>InnerText</div> 


HtmlNode parentNode = doc.DocumentNode.SelectSingleNode("//*[@id=\"orders\"]"); 
HtmlNode childNode = parentNode.SelectSingleNode("/div/div/div"); 
string myStr = childNode.InnerText; // should be "InnerText", no? 

这似乎合乎逻辑,但我在myStr上抛出NullReferenceExceptions。这是我的xpath符号还是我误解了层次结构?C#HtmlAgilityPack相对节点选择。 Xpath是非常,非常淘气

+0

我想你childNode的XPath是错了.. – NuWin

回答

2

相对XPath不应该以/开头。从/开始,XPath将被视为相对于根文档节点(换言之,绝对而不是相对于上下文元素)。由于HTML文档的根元素不是div,/div预计会返回没有匹配的元素。

您应该使用./代替:

HtmlNode childNode = parentNode.SelectSingleNode("./div/div/div"); 

或只是直接从divchild::轴是在没有明确的轴提及的默认启动:

HtmlNode childNode = parentNode.SelectSingleNode("div/div/div"); 
+0

完美的谢谢! – 2confused4u