XML xpath, получить дочерний элемент корневого элемента

Ниже приведен 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";

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

1 ответ

Попробуйте использовать приведенное ниже выражение для соответствия родителя с обязательным 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]
Другие вопросы по тегам