我正在寻找合适的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
答案 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
的顶部元素的子元素。