XML xpath, получить дочерний элемент root

139
11

Ниже приведен пример XML.

      <?xml version="1.0" encoding="utf-8"?>
<store d:mi="22">
<book price="12.99" d:price="Number" d:mi="4">
<title d:constr="String" d:mi="1">Sword of Honour</title>
<category d:constr="String" d:mi="2">fiction</category>
<author d:constr="String" d:mi="3">Evelyn Waugh</author>
</book>
<book price="8.99" d:price="Number" d:mi="9">
<sublist>
<title d:constr="String" d:mi="5">Moby Dick</title>
<category d:constr="String" d:mi="6">fiction</category>
<author d:constr="String" d:mi="7">Herman Melville</author>
<isbn d:constr="String" d:mi="8">0-553-21311-3</isbn>
</sublist>
</book>
<Note price="8.95" d:price="Number" d:mi="13">
<title d:constr="String" d:mi="10">50</title>
<category d:constr="String" d:mi="11">reference</category>
<author d:constr="String" d:mi="12">Nigel Rees</author>
</Note>
<Note price="22.99" d:price="Number" d:mi="18">
<title d:constr="String" d:mi="14">The Lord of the Rings</title>
<category d:constr="String" d:mi="15">fiction</category>
<author d:constr="String" d:mi="16">J. R. R. Tolkien</author>
<isbn d:constr="String" d:mi="17">0-395-19395-8</isbn>
</Note>
</store>

Используя следующий Xpath, я могу получить элемент store.

   String name = "String";
String xpath = "//title[@d:constr='" + name + "']/parent::store";

Но нам нужно получить книгу (все, что может прийти, чего мы не знаем), которая является дочерним элементом магазина (постоянное слово). Можно ли это сделать?

спросил(а) 2021-01-25T19:20:18+03:00 4 месяца, 2 недели назад
1
Решение
132

Попробуйте использовать нижеприведенное выражение для соответствия родительскому имени требуемого title игнорируя имя узла:

String name = "String";
String xpath = "//title[@d:constr='" + name + "']/parent::*";

Также обратите внимание, что store не является родителем title, вы должны использовать "//title/ancestor::store" вместо "//title/parent::store"

Если вы просто хотите получить ребенка из store:

//store/child::*

Первый ребенок:

//store/child::*[1]

ответил(а) 2021-01-25T19:20:18+03:00 4 месяца, 2 недели назад
Ваш ответ
Введите минимум 50 символов
Чтобы , пожалуйста,
Выберите тему жалобы:

Другая проблема