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

Nir*_*tzy 31 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]
Run Code Online (Sandbox Code Playgroud)

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

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

ale*_*brn 61

鉴于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表达.


Dim*_*hev 10

用途:

/root/div[.//a[@class='1']]/text()
Run Code Online (Sandbox Code Playgroud)

这将选择任何文本节点,该节点是具有value属性的任何a元素的子节点, 并且(该元素)是任何元素的后代,该元素是名为top元素的子元素.class'1'adivroot