bこの例では、すべてから最初の要素を取得したいと思いますt(実際のxmlはより深くネストされている可能性があります)。残念ながら、私はに制限されていxpath 1.0ます。私の最初の考えは次のようなもの//t//b[position()=1]でしたが、それを機能させることができません。
<t>
<a>
<b/>
<b/>
<b/>
</a>
</t>
<t>
<a>
<b/>
<b/>
<b/>
</a>
</t>
bこの例では、すべてから最初の要素を取得したいと思いますt(実際のxmlはより深くネストされている可能性があります)。残念ながら、私はに制限されていxpath 1.0ます。私の最初の考えは次のようなもの//t//b[position()=1]でしたが、それを機能させることができません。
<t>
<a>
<b/>
<b/>
<b/>
</a>
</t>
<t>
<a>
<b/>
<b/>
<b/>
</a>
</t>
それはほぼ正しいです。最初に、述語[position()=1]は単にと同等であることに注意してください[1]。これからは短い形式を使用します。今定義により
//t//b[1]
の省略形です
//t/descendant-or-self::node()/child::b[1]
bしたがって、a内のどこかにネストされ、それぞれの親要素tの最初の子であるすべての要素が提供されます。bこのように与えられた
<t>
<a>
<b attr="1"/>
<b attr="2"/>
</a>
<a>
<b attr="3"/>
</a>
</t>
あなたはbの1とb3を得るでしょう。あなたがそれぞれの中に最初のものだけが欲しいならt、あなたは必要です
//t/descendant::b[1]
上記の例のXMLを考えると、これは<b attr="1"/>
.//x通常は同等として扱うことができますがdescendant::x、これは2つの間の微妙な違いを示すエッジケースの1つです...