#xml #xpath
Вопрос:
Я пытаюсь это сделать:
//x[//y[@a = @b]]
Мне нужно найти все элементы <x>
, которые есть <y>
где-то в документе, такие, что x/@a = y/@b
. Очевидно, что мой код неверен. Как показать, что @a
принадлежит x
и @b
принадлежит y
кому ?
Комментарии:
1. Вы имеете в виду: Найти все элементы с именем тега
x
и атрибутомa
, например, есть некоторые другие элементы с именем тегаy
и атрибутомb
, где значение атрибутаa
в элементеx
равно значению атрибутаb
в элементеy
?2. @Пророк да, именно так
Ответ №1:
Что касается вопроса о буквальном названии (как ссылаться на родителя в XPath?), ответом было бы использовать parent::
ось или ее аббревиатуру ( ..
). Однако на самом деле это не требуется для достижения требуемого результата здесь.
Этот XPath,
//x[@a = //y/@b]
будет выбраны все x
элементы со a
значением атрибута, равным y
b
значению атрибута какого-либо элемента в любом месте документа.
Комментарии:
1. Будет ли это работать, если я заменю
=
на!=
в определении задачи?2. @yegor256: Это будет работать для некоторого определения работы . Вероятно, это не будет делать то, что, как я подозреваю, вам нужно: если вы хотите выбрать те
x
элементы, которые не были выбраны исходным XPath, вместо этого используйте//x[not(@a = //y/@b)]