通过innertext选择XPath

时间:2010-01-04 10:28:55

标签: xml xpath

我正在尝试从解析的XML文档中提取具有特定innertext的元素。我知道我可以使用//myparent[mychild='foo']选择一个具有特定innertext子元素的元素,但实际上我只想在这个例子中选择“mychild”元素。

<myparent>
  <mychild>
    foo
  </mychild>
</myparent>

将返回“mychild”节点的“foo”的XPath查询是什么?

4 个答案:

答案 0 :(得分:78)

你试过这个吗?

//myparent/mychild[text() = 'foo']

或者,您可以使用self轴的快捷方式:

//myparent/mychild[. = 'foo']

答案 1 :(得分:4)

马特说,但完整的解决方案:

//myparent[mychild='foo']/mychild

答案 2 :(得分:3)

如果这样找到测试,您可以考虑使用contains函数返回true / false:

//mychild[contains(text(),'foo')]

有关功能参考,请参见XSLT, XPath, and XQuery Functions

答案 3 :(得分:0)

根据 HTML:

<myparent>
  <mychild>
    foo
  </mychild>
</myparent>

文本为 foo<mychild> 元素位于其父 <myparent> 标签内,文本包含 leadingtrailing 空格 字符。

因此要选择 <mychild> 元素,您可以使用以下任一解决方案:

  • 使用 normalize-space()

    //myparent/mychild[normalize-space()='foo']
    
  • 使用 contains()

    //myparent/mychild[contains(., 'foo')]
    

忽略您也可以使用的父 <myparent> 标记:

  • 使用 normalize-space()

    //mychild[normalize-space()='foo']
    
  • 使用 contains()

    //mychild[contains(., 'foo')]