これは、HtmlAgilityPack C#パーサーと一緒に使用しようとしたxpathテキストです。
//div[@id = 'sc1']/table/tbody/tr/td/span[@class='blacktxt']
私はfirefox xpath add = onでxpath式を評価しようとしましたが、必要な項目を正常に取得しました。しかし、C#コードはNull例外を返します。
HtmlAgilityPack.HtmlNodeCollection node = htmldoc.DocumentNode.SelectNodes("//div[@id ='sc1']/table/tbody/tr/td/span[@class='blacktxt']");
MessageBox.Show(node.ToString());
ノードには常にヌル値が含まれています...この問題を回避する方法を見つけるのを手伝ってください...ありがとうございます..
<tbody/>
タグを挿入する必要があります XPath式を構築するための一般的なブラウザ拡張は、すべてDOM上で動作します。 HTML仕様とは逆に、DOM仕様では、 <tr/>
要素は<tbody/>
要素の内側にある必要があります。 Firebug(またはDOM上で動作する同様の開発者ツール)を使用してHTMLソースを見ると、ページソースを表示する(必要ならば何も解釈しないwget
や同様のツールを使用する)場合、違いを簡単に見ることができます。
/tbody
軸のステップを削除すれば、XPath式が動作するでしょう。
//div[@id = 'sc1']/table/tr/td/span[@class='blacktxt']
<tbody/>
タグの<tbody/>
ずHTMLをサポートする必要がある場合より一般的な解決策としては、 /tbody
tbody軸のステップをdecendant-or-selfステップ//
で置き換えることができます。しかし、これは "内部テーブル"にジャンプする可能性があります:
//div[@id = 'sc1']/table//tr/td/span[@class='blacktxt']
代替のXPath式を使用する方が良いでしょう。
//div[@id = 'sc1']/table/tr/td/span[@class='blacktxt'] | //div[@id = 'sc1']/table/tbody/tr/td/span[@class='blacktxt']
より洗練されたXPath 2.0のみのソリューション
//div[@id = 'sc1']/table/(tbody, self::*)/tr/td/span[@class='blacktxt']