按值选择文本节点

时间:2011-11-03 02:51:18

标签: xml xpath

鉴于希望使用XPath根据其值选择XML文本节点,是否有更好的方法:

//*[text()="foo"]/text()

我假设有类似的东西:

//text()[self="foo"]

...但我不知道该为self添加什么。

2 个答案:

答案 0 :(得分:3)

在XPath中,句点或点字符. self ,也称为“上下文节点”。

此查询...

//text()[.="foo"]

...将选择值为“foo”的所有文本节点。

答案 1 :(得分:2)

您通常会找到正确的答案:

//text()[.="foo"] 

但请注意以下事项:

  1. 只要XML文档的结构是静态知道的,就应该尽可能避免使用XPath //伪运算符,因为它的评估会导致完整的子树(在最糟糕的情况是完整的文档树)被遍历并且效率非常低。如果您知道所有文本节点都是c的子节点,并且c可以选择文档中的所有/a/b/c,请使用:/a/b/c/text()。如果您只知道所有文本节点都是c后代,那么使用:/a/b/c//text()//text()或甚至{{1}更好}

  2. 文本节点通常包含我们通常不会注意到的空格。在这种情况下,需要写:

    //c//text()

    而不是

    normalize-space(.) = 'foo'