XPATH Как выбрать двух конкретных детей от одного и того же родителя - PullRequest
0 голосов
/ 26 декабря 2018

Спокойной ночи, друзья!

Предположим, у нас есть xml с 30 подобными предметами, и я хочу получить только name и url из элементагде имя содержит слово: Ричард.

<channel>
    <item>
      <name>Brian</name>
      <lastname>Connor</lastname>
      <age>40</age>
      <enclosure url="http://www.brian.com"/>
    </item>
    <item>
      <name>Richard</name>
      <lastname>Wendell</lastname>
      <age>38</age>
      <enclosure url="http://www.richard.com"/>
    </item>
</channel>

Как я могу сделать это с помощью XPath?Я попытался: "//channel/item[name[contains(text(),'Richard')]]", но он возвращает только имя, и я не знаю, как выбрать URL-адрес вместе.

Пожалуйста, извините за мой английский!

1 Ответ

0 голосов
/ 26 декабря 2018

Ваш подход не работает, потому что вы выбираете поддерево (в данном случае item) дерева XML, которое содержит больше информации, чем вы хотите.Если вам нужно только подмножество атрибутов в ОДНОМ выражении xpath, вы должны выбрать их отдельно, а затем соответствующим образом объединить, например,

concat('name=', //channel/item[contains(name, 'Richard')]/name, ' url=', //channel/item[contains(name, 'Richard')]/enclosure/@url)

. Этот пример позволит вам легко изменить дополнительное форматирование.

Кстати: ваш ввод XML был неверно отформатирован.Я исправил это.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...