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']]