1

bこの例では、すべてから最初の要素を取得したいと思いますt(実際のxmlはより深くネストされている可能性があります)。残念ながら、私はに制限されていxpath 1.0ます。私の最初の考えは次のようなもの//t//b[position()=1]でしたが、それを機能させることができません。

<t>
 <a>
   <b/>
   <b/>
   <b/>
 </a>
</t>
<t>
 <a>
   <b/>
   <b/>
   <b/>
 </a>
</t>
4

1 に答える 1

1

それはほぼ正しいです。最初に、述語[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の1b3を得るでしょう。あなたがそれぞれの中に最初のものだけが欲しいならt、あなたは必要です

//t/descendant::b[1]

上記の例のXMLを考えると、これは<b attr="1"/>

.//x通常は同等として扱うことができますがdescendant::x、これは2つの間の微妙な違いを示すエッジケースの1つです...

于 2013-01-14T19:11:36.643 に答える