XPath-запрос, который учитывает положение узла и значение атрибута

Есть ли способ построить запрос 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>

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

Найдите все узлы Item типа "Book", где у второго узла Param значение "John". Поэтому я хотел бы найти все книги, где авторы первого имени зовутся "Джон".

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

3 ответа

Решение

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

Так ограничивается XPath V1.

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

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

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

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

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

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

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

//Item/Param[2][@Value='John']
Другие вопросы по тегам