Xml 按值选择文本节点
鉴于希望使用XPath根据XML文本节点的值选择该节点,有没有比以下更好的方法:Xml 按值选择文本节点,xml,xpath,Xml,Xpath,鉴于希望使用XPath根据XML文本节点的值选择该节点,有没有比以下更好的方法: //*[text()="foo"]/text() 我假设有这样的情况: //text()[self="foo"] …但我不知道在XPath中,句号或点字符是self,也称为“上下文节点”,它是self 此查询 //text()[.="foo"] …将选择值为“foo”的所有文本节点。您通常已找到正确答案: //text()[.="foo"] 但是,请注意以下几点: 只要XML文档的结构是静态已知的,就应该
//*[text()="foo"]/text()
我假设有这样的情况:
//text()[self="foo"]
…但我不知道在XPath中,句号或点字符是self,也称为“上下文节点”,它是self 此查询
//text()[.="foo"]
…将选择值为“foo”的所有文本节点。您通常已找到正确答案:
//text()[.="foo"]
但是,请注意以下几点:
/
伪运算符,因为它的计算会导致遍历完整的子树(在最坏的情况下是完整的文档树),而且效率非常低。如果您知道所有文本节点都是c
的子节点,并且文档中的所有c
都可以由/a/b/c
选择,请使用:/a/b/c/text()
。如果您只知道所有文本节点都是c
的后代,那么使用/a/b/c//text()
比/text()
甚至比/c//text()
更好normalize-space(.) = 'foo'
而不是
. = 'foo'
我认为*是个打字错误,是吗?@pguardiario确实是,是的。谢谢。回答得很好,但有一些特点需要考虑,例如多次不必要地使用
/
,并且没有考虑周围的空白。您获得接受分数是因为:您确认了似乎有效的内容;你不是我;关于规范化空间
的精彩注释。感谢(一如既往)分享您的XPath专业知识。