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
Ответы
Ответ 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
.