XPath-запрос, который учитывает положение узла и значение атрибута - PullRequest
0 голосов
/ 03 июня 2009

Есть ли способ построить запрос XPath, который находит узел в определенной позиции И с определенным значением атрибута?

Рассмотрим следующий пример xml:

<Item Type="Book">
<!--1st Param node in a Book item is always the autors last name-->
<Param Value="Updike" />
<!--2nd Param node in a Book item is always the autors first name-->
<Param Value="John" />
<!--3rd Param node in a Book item is always the book title-->
<Param Value="Toward the End of Time" /></Item>

Теперь я могу создать один запрос, который находит следующее:

Найти все Элемент узлов Тип"Книга", где 2-й Параметр узел имеет Значение слова "Джон". Поэтому я хотел бы найти все книги, где имя автора - «Джон».

Обратите внимание, что я использую .NET XPathDocument.

Ответы [ 3 ]

5 голосов
/ 03 июня 2009

А как насчет требования иметь только Предмет, который является Книгой?

Попробуйте это:

/Item[@Type='Book'][Param[2][@Value='John']]
2 голосов
/ 03 июня 2009

Обратите внимание, что я использую .NET XPathDocument.

Так ограничено XPath V1.

Вы можете включить (относительные и абсолютные) пути в предикат. Так что-то вроде:

//Item[@Type='Book'][./Param[2][@Value = 'John']]

(Я бы попытался избежать "//", поскольку он требует поиска по всему DOM, но не может обеспечить лучшую ось без большего контекста.)

0 голосов
/ 03 июня 2009

Выражение будет:

//Item/Param[2][@Value='John']
...