XPath - Как я могу запросить родительский узел, удовлетворяющий условию присутствия атрибута? - PullRequest
1 голос
/ 16 мая 2009

Мне нужно запросить узел, чтобы определить, есть ли у него родительский узел, который содержит указанный атрибут. Например:

<a b="value">
    <b/>
</a>

Из b в качестве элемента фокуса я бы хотел выполнить запрос XPath:

..[@b]

, который вернул бы элемент a . Возвращаемый элемент должен быть родительским узлом a и не должен содержать ни одного из родственных элементов a .

Библиотека lxml.etree утверждает, что это недопустимое выражение XPath.

Ответы [ 2 ]

4 голосов
/ 16 мая 2009

Нельзя комбинировать сокращения . или .. с предикатом. Вместо этого вам нужно будет использовать полную ось parent::. Следующее должно работать для вас:

parent::*[@b]

Это выберет родительский узел (независимо от его локального имени), если он имеет атрибут "b".

1 голос
/ 16 мая 2009

Я не знаю о библиотеке lxml.etree, но ..[@b] - это полностью действительный XPath ( Обновление : см. Комментарий Бена Бланка). Идентичный parent::a[@b], он вернет контекст в элементе a.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...