使用复合XPath谓词搜索XML消息

时间:2010-10-18 20:32:54

标签: xml xpath predicate

我无法确定如何使用复合XPath查询选择数据,这样我就可以在数据中找到第5行。这是我的示例XML:

<sample>
 <OBX>
   <field position="1">1</field>
   <field position="2">My Value</field>
 </OBX>
 <OBX>
   <field position="1">2</field>
   <field position="2">My other (and more important) value</field>
 </OBX>
</sample>

基本上我需要做的是在[field @ position ='1']等于2时找到[field @ position ='2']的值。我正在尝试:

OBX[./field[@position='1']='2']/field[@position='2']

但这没有任何价值。完成这项工作的正确方法是什么?

谢谢,

麦克

1 个答案:

答案 0 :(得分:1)

我已验证此XPath表达式

/*/OBX[field[@position='1']='2']/field[@position='2']
根据提供的XML文档进行评估时

<sample>
 <OBX>
   <field position="1">1</field>
   <field position="2">My Value</field>
 </OBX>
 <OBX>
   <field position="1">2</field>
   <field position="2">My other (and more important) value</field>
 </OBX>
</sample>

会选择所需的节点

以下是使用XSLT作为XPath托管语言的演示:

<xsl:stylesheet version="1.0"
 xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
 <xsl:output omit-xml-declaration="yes" indent="yes"/>

 <xsl:template match="/">
  <xsl:copy-of select="/*/OBX[field[@position='1']='2']/field[@position='2']"/>
 </xsl:template>
</xsl:stylesheet>

对提供的XML文档应用此转换时,会生成正确的结果

<field position="2">My other (and more important) value</field>