С выражением .//b
я могу найти все элементы ниже текущего элемента с тегом b
. Если текущий элемент также имеет тег b
, он не будет найден. Как я могу выразить, что я хочу найти всех дочерних элементов текущего тега , а также самого текущего элемента, если он соответствует заданному имени тега?
Вот пример ввода XML:
<a>
<b>
<i>
<u>one</u>
</i>
<b>two</b>
</b>
<b>three</b>
<em>four</em>
</a>
Если первый элемент <b>
является текущим элементом, я хочу получить все подэлементы (т. Е. Содержащие two
) и сам элемент, но не элемент, содержащий three
(при поиске тегов b
). При поиске тегов u
я хочу получить только тот, который содержит one
.
Я пробовал .[name()='b']|.//b
, но это, видимо, недопустимое выражение.
Я также пытался ..//b
, но затем я получал не только сам элемент и элемент, содержащий two
, но и элемент, содержащий three
.
Возможно ли с одним выражением XPath получить то, что я хочу?
Примечание: я использую это в библиотеке Python lxml / etree, но это не должно иметь никакого значения.