XML xpath,获取父元素直到特定元素

时间:2011-05-29 11:29:02

标签: xpath element parent

我正在寻找合适的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]

我希望得到文本“THE TEXT”,但是在同一个div中包含a [class=1]的文本。像这样:

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

2 个答案:

答案 0 :(得分:60)

鉴于XML

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

你可以使用XPath表达式从baz找到最近的祖先 foo元素:

//baz/ancestor::foo[1]

将选择id为“i2”的foo元素节点。

所以在你的例子中(如果我理解的话),一旦你得到了你想要的“a”元素,你可以通过追加“/ ancestor :: div [1]将树”备份“到最近的祖先div “到你的表达。

答案 1 :(得分:10)

使用

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

这将选择任何a元素的子元素的任何文本节点,其class属性的值为'1',并且a元素)为后代任何div个元素,它是名为root的顶部元素的子元素。