代码之家  ›  专栏  ›  技术社区  ›  mclark1129

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

  •  1
  • mclark1129  · 技术社区  · 14 年前

    我很难理解如何使用复合的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 回复  |  直到 14 年前
        1
  •  1
  •   Dimitre Novatchev    14 年前

    我已经验证了这个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>