Как ссылаться на родителя в XPath?

#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)]