Xpathで何番目の要素を示す
一般的には次のように紹介されてることが多い。
/node/element[1] /node/element[2] /node/element[3] /node/element[4]
これは、「兄弟ノード」siblingから選んでるところに注意が必要
兄弟として要素が並んでいるところから取り出す。
<root> <anchor> <em></em> </anchor> <anchor> <em></em> </anchor> <anchor> <em></em> </anchor> <anchor> <em></em> </anchor> </root>
XML中で要素が並んでいる時に使える。
また、複数の要素をタグ名関係なしに選びたいときは
/element/*[1] #=> 1つ
- を使えば、並んでるところを同じ兄弟とみなすことが出来る。
siblingsとして並んでない場合は注意
強欲に "//*" を使っている場合は、n番目の指定は注意が必要。
//a
//a[1]
上のように、子孫ノード全部から選んだ場合は、子孫ノードで 並んでいるところの先頭を全部取り出す。
<root> <a></a><!-- ここ は1番目 --> <a></a> <a></a> <list> <a></a><!-- ここ は1番目 --> <a></a> <a></a> </list> <list> <a></a> <!-- ここ は1番目 --> <list> <a></a><!-- ここ は1番目 --> <a></a> <a></a> </list> <a></a> <a></a> </list> </root>
なので4つノードが取得される。
//a[1] #=> 4つ
xpath の【a[1]】 は実行結果に対して、1番目のノードを選んでいるのではなく、検索条件であることをもう一度意識したら間違わないと思います。