私は何かシンプルなことをしようとしているが、何とかそれは私のために働くdoesnt、ここに私のコードです:
var items = html.DocumentNode.SelectNodes("//div[@class='itembox']");
foreach(HtmlNode e in items)
{
int x = items.count; // equals 10
HtmlNode node = e;
var test = e.SelectNodes("//a[@class='head']");// I need this to return the
// anchor of the current itembox
// but instead it returns the
// anchor of each itembox element
int y =test.count; //also equals 10!! suppose to be only 1
}
私のhtmlページは次のようになります:
....
<div class="itembox">
<a Class="head" href="one.com">One</a>
</div>
<div class="itembox">
<a Class="head" href="two.com">Two</a>
</div>
<!-- 10 itembox elements-->
....
私のXPath式は間違っていますか?私は何かが欠けていますか?
つかいます
var test = e.SelectNodes(".//a[@class='head']");
代わりに。現在のコード( //a[]
)は、ルートノードから始まるすべての要素を検索します。代わりにドットの前に接頭辞( .//a[]
)を.//a[]
と、現在のノードの子孫だけが考慮されます。それはあなたの場合の直接の子供であるので、あなたはもちろんもちろんできます:
var test = e.SelectNodes("a[@class='head']");
詳細はXpathの仕様を参照してください。
var test = e.SelectNodes("//a[@class='head']");
これは絶対的な表現ですが、相対的なXPath式を必要とする-オフ評価されるe
。
そのため、
var test = e.SelectNodes("a[@class='head']");
注意: XPath //
擬似演算子はできるだけ使用しないでください。そのような使用は重大な非効率(減速)を招く可能性があるためです。
この特定のXMLドキュメントではa
要素がのちょうど子供であるdiv
-ではないオフundefinite深さでdiv
。