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とb
3を得るでしょう。あなたがそれぞれの中に最初のものだけが欲しいならt
、あなたは必要です
//t/descendant::b[1]
上記の例のXMLを考えると、これは<b attr="1"/>
.//x
通常は同等として扱うことができますがdescendant::x
、これは2つの間の微妙な違いを示すエッジケースの1つです...