Запрос 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 типа Type "Book", где второй узел Param имеет Value "John". Итак, я хотел бы найти все книги, авторов которых, прежде всего, зовут «Джон».

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


person bitbonk    schedule 03.06.2009    source источник


Ответы (3)


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

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

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

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

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

person Richard    schedule 03.06.2009
comment
Ваше самовыражение не ограничивается книгами. - person Ben Blank; 03.06.2009

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

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

/Item[@Type='Book'][Param[2][@Value='John']]
person jeremy    schedule 03.06.2009

Выражение могло бы быть таким:

//Item/Param[2][@Value='John']
person Mike Marshall    schedule 03.06.2009