2012-02-10 239 views

回答

13

如果你想测试的名称,你几乎拥有了:

//text()[name(parent::*)='p'] 

如果你试图返回名称:

name(//text()/parent::*) 
+0

这是比名称(/ /文本()/ ..)更好的做法吗? – emschorsch 2013-04-17 21:16:53

+1

不,'''和'parent ::'是一样的。我通常使用'..',但这是一个旧的答案,谁知道我当天在想什么;-) – 2013-04-17 23:33:36

2
//text/..[@name='p'] 

这将让<text>节点的所有的父母,只要父母一方的p一个name属性。

+1

他的术语令人困惑,但他正在谈论文本节点,而不是''元素......和元素名称,而不是'name'属性。 – LarsH 2012-02-11 03:12:30

+0

啊。谢谢,LarsH。 – 2012-02-12 05:45:07

4

仅供参考,术语点:一文本节点不是一个元素。

总之,要选择当前节点的父最简洁的方式是..

所以,当前节点(可以是文本节点)的父元素的名称name(..)

这代到您的XPath表达式:

//text()[name(..)='p'] 

但不太迂回的方式来写,这将是

//p/text() 

(假设文档中的p元素没有名称空间前缀)。无论哪种方式,您都选择了名为p的元素的子元素的所有文本节点。

+0

谢谢你的额外解释。 – Xeoncross 2012-02-11 21:49:06