2016-08-25 7 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"); 

またはちょうどchild::軸が明示的な軸が言及されていないデフォルトであるため、直接divで始まるを:

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

完璧なおかげで! – 2confused4u

関連する問題