ある属性値を持つノードを選択するXPathは、他のノードの属性値と等しい[クローズ]


87
<grand id="grand">
  <parent>
    <child age="18" id="#not-grand"/>
    <child age="20" id="#grand"/> <!-- This is what I want to locate -->
  </parent>
</grand>

誰かが2番目の子供を見つけるために表現する方法を教えてもらえますか?

これは機能しません...

"/grand/parent/child[@id=concat('#',/grand/@id)]/@age"

ありがとうございました。


申し訳ありません。式はOKです。式自体ではなく、他の領域で問題が発生したことがわかりました。


3
あなたのxpathは私にとってはうまく機能します。
dogbane

3
私も同じです。ここテストしたところ、2番目の子要素が選択されました。
アンドレアスドルク

2
そうですね…表情はOKです。申し訳ありません。式(名前空間プレフィックス)とインスタンスドキュメントにいくつかの間違いがありました。ありがとうございました。
ジンクォン

回答:


95

このXPathは、提供したコードスニペットに固有のものです。あなたが書くことができるように<child>idで選択#grandするには//child[@id='#grand']

年齢を取得するには //child[@id='#grand']/@age

お役に立てれば


1
ヴァマンありがとう。それは役に立ちました。最初に評価する必要のある値( '#grand')ではなく、式( '/ grand / @ id')を1回の評価で参照することを意味しました。
ジンクォン

XMLにname属性のセクションのリストがある場合、どのように選択するかはsubDataSourceとしてですか?例: <section name="valuation"> <capital-value> some data </capital-value> <location> some data </location> </section> <section name="subject-property"> <address>72 Gordon Avenue</address> <postcode>HA7 3QS</postcode> <bedrooms>2</bedrooms> </section>
Sanjay Sahani

30

私はこれがあなたが望むものだと思います:

/grand/parent/child[@id="#grand"]

2
MarcoSに感謝します。最初に評価する必要のある値( '#grand')ではなく、式( '/ grand / @ id')を1回の評価で参照することを意味しました。
ジンクォン

2
@ jin-kwon:なるほど。つまり、XPathは問題ありません。
MarcoS
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.