HtmlAgilityPack C#--- Selectノードは常にNullを返します

c# html-agility-pack html-parsing xpath

質問

これは、HtmlAgilityPack C#パーサーと一緒に使用しようとしたxpathテキストです。

//div[@id = 'sc1']/table/tbody/tr/td/span[@class='blacktxt']

私はfirefox xpath add = onでxpath式を評価しようとしましたが、必要な項目を正常に取得しました。しかし、C#コードはNull例外を返します。

//div[@id = 'sc1']/table/tbody/tr/td/span[@class='blacktxt']

ノードには常にヌル値が含まれています...この問題を回避する方法を見つけるのを手伝ってください...ありがとうございます..

人気のある回答

DOMに<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']

より洗練されたXPath 2.0のみのソリューション

//div[@id = 'sc1']/table/tr/td/span[@class='blacktxt']



ライセンスを受けた: CC-BY-SA with attribution
所属していない Stack Overflow
このKBは合法ですか? はい、理由を学ぶ
ライセンスを受けた: CC-BY-SA with attribution
所属していない Stack Overflow
このKBは合法ですか? はい、理由を学ぶ