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>

Хто-небудь може сказати мені, як висловити свою думку для пошуку другої дитини?

Це не працює ...

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

Дякую.


Вибачте. Вираз нормально. Я виявив, що маю певні проблеми в іншій області, не в самому вираженні.


3
Ваш xpath чудово працює для мене.
dogbane

3
Те саме для мене - просто перевірив тут, і він вибирає другий дочірній елемент.
Андреас Долк,

2
Правильно ... Вираз нормально. Вибачте. Я зробив кілька помилок у виразі (префікс простору імен) та документі екземпляра. Дякую.
Джин Квон,

Відповіді:


95

Цей XPath стосується фрагмента коду, який ви надали. Щоб вибрати <child>з ідентифікатором, як #grandви можете писати //child[@id='#grand'].

Щоб отримати вік //child[@id='#grand']/@age

Сподіваюся, це допомагає


1
Дякую Вамман. Це допомогло. Я мав на увазі посилання на вираз ('/ grand / @ id') для одноразової оцінки, а не на значення ('# grand'), яке слід оцінити спочатку.
Джин Квон,

що якщо у моєму 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>
Санджай Саані

30

Я думаю, що це те, що ви хочете:

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

2
Дякую, MarcoS. Я мав на увазі посилання на вираз ('/ grand / @ id') для одноразової оцінки, а не на значення ('# grand'), яке слід оцінити спочатку.
Джин Квон,

2
@ jin-kwon: Розумію. Отже, ви XPath - це добре.
MarcoS
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.