XML xpath, получить родительский элемент до определенного элемента - PullRequest
31 голосов
/ 29 мая 2011

Я ищу правильный синтаксис 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

Ответы [ 2 ]

60 голосов
/ 29 мая 2011

С учетом XML

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

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

//baz/ancestor::foo[1]

Который выберет узел элемента foo id "i2".

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

10 голосов
/ 29 мая 2011

Использовать :

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

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

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