鉴于希望使用XPath根据其值选择XML文本节点,是否有更好的方法:
//*[text()="foo"]/text()
我假设有类似的东西:
//text()[self="foo"]
...但我不知道该为self
添加什么。
答案 0 :(得分:3)
在XPath中,句点或点字符.
是 self ,也称为“上下文节点”。
此查询...
//text()[.="foo"]
...将选择值为“foo”的所有文本节点。
答案 1 :(得分:2)
您通常会找到正确的答案:
//text()[.="foo"]
但请注意以下事项:
只要XML文档的结构是静态知道的,就应该尽可能避免使用XPath //
伪运算符,因为它的评估会导致完整的子树(在最糟糕的情况是完整的文档树)被遍历并且效率非常低。如果您知道所有文本节点都是c
的子节点,并且c
可以选择文档中的所有/a/b/c
,请使用:/a/b/c/text()
。如果您只知道所有文本节点都是c
的后代,那么使用:/a/b/c//text()
比//text()
或甚至{{1}更好}
文本节点通常包含我们通常不会注意到的空格。在这种情况下,需要写:
//c//text()
而不是
normalize-space(.) = 'foo'