Подтвердить что ты не робот

XML xpath, получить родительский элемент до определенного элемента

Я ищу правильный синтаксис xpath для получения определенного родителя элемента. Пример:

root
   |- div
   |     |
   |     |----??? ---|
   |     |           |-a [class=1]
   |     |                      |- text[ A TEXT I DON'T WANT]
   |     |
   |     |
   |     |
   |     |-text[THE TEXT]
   |
   |-div 
   |    |-text[THE TEXT I DON'T WANT]
   |
   |-div 
   |    |-text[THE TEXT I DON'T WANT]

Я хочу получить текст "ТЕКСТ", но тот, который содержит a [class=1] внутри одного и того же div. Что-то вроде этого:

//div//a[@class=1]/text[contains(.,'A TEXT')]/parent::*/parent::*.... <till div element>  /text
4b9b3361

Ответ 1

Учитывая XML

<?xml version="1.0"?>
<root>
    <foo id="id1">
        <foo id="i2">
            <baz/>
        </foo>
    </foo>
</root>

Вы можете найти ближайший элемент foo предка из baz, используя выражение XPath:

//baz/ancestor::foo[1]

который выберет элемент foo node идентификатора "i2".

Итак, в вашем примере (если я правильно понял), когда у вас есть элемент "a", который вы хотите, вы можете получить "резервное копирование" дерева до ближайшего div-предка, добавив "/ancestor:: div [1]" к вашему выражению.

Ответ 2

Использование

/root/div[.//a[@class='1']]/text()

Это выбирает любой текст node, являющийся дочерним элементом любого элемента a, который имеет атрибут class со значением '1' и что (элемент a) является потомком любого элемента div это дочерний элемент верхнего элемента с именем root.