それマグで!

知識はカップより、マグでゆっくり頂きます。 takuya_1stのブログ

習慣に早くから配慮した者は、 おそらく人生の実りも大きい。

XPathで何番目を示すための方法(注意点

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番目のノードを選んでいるのではなく、検索条件であることをもう一度意識したら間違わないと思います。

参考資料

http://blog.bangboo.com/sub/xpath.html