如何根据子节点的文本值选择节点?

时间:2013-12-16 19:12:01

标签: xpath

我想根据孩子的文本值选择一个节点。 我的结构如下(抱歉德国节点):

<InspizierteAbwassertechnischeAnlage>           
  <Objektbezeichnung>10502002</Objektbezeichnung>
  <Anlagentyp>1</Anlagentyp>
</InspizierteAbwassertechnischeAnlage>

如何选择<InspizierteAbwassertechnischeAnlage>节点,例如<Objektbezeichnung> = 10502002?

1 个答案:

答案 0 :(得分:1)

为什么您的解决方案不起作用

ancestor:://*[text()='10502002']在语法上是不正确的,它不是有效的XPath。我不确定你在这里尝试做什么。

//*[text()='10502002']本身只会选择Objektbezeichnung本身,而不是其父级。它还会选择具有此类值的任何其他元素,而不管其名称如何。如果是本文档,则不会返回任何冗余,但在使用通配符时必须小心(*

解决方案

这很简单,您必须使用谓词来检查子元素的内容

//InspizierteAbwassertechnischeAnlage[Objektbezeichnung = '10502002']

请注意双斜杠(//),它是descendant-or-self轴的abbreviated syntax 。上述表达式转换为:

/descendant-or-self::InspizierteAbwassertechnischeAnlage[Objektbezeichnung = '10502002']

或者用简单的英语

  

在文档根目录的所有后代的集合中,查找包含至少一个InspizierteAbwassertechnischeAnlage元素的Objektbezeichnung元素,其值为10502002

至于德国元素名称,至少它不是Hottentottenstottertrottelmutterbeutelrattenlattengitterkofferattentäter或Rhababerbarbarabarbarbarenbartbarbierbierbarbärbel