【问题标题】:Getting XML node matching XPath expression获取与 XPath 表达式匹配的 XML 节点
【发布时间】:2012-08-24 13:36:35
【问题描述】:

希望您能对此有所帮助。我在网上尝试了许多 XPath 测试人员,但都没有找到解决方案。

我正在尝试从此 XML 中获取具有 '~tid' 属性的第一个节点的值:

<Response status="ok" version="1.1">
                 <Action>
                    <Page>
                       <Params>
                          <Param name="~tid" value="1345811517165"/>
                          <Param name="~action-type" value="DATA"/>
                          <Param name="~from-page" value="login"/>
                          <Param name="~from-act" value="submitData"/>
                          <Param name="login_USERNAME" value="" type="0"/>
                          <Param name="login_PASSWORD" value="" type="0"/>
                       </Params>
                    </Page>
                    <Data name="clientData" method="POST">
                       <Params>
                          <Param name="timezoneoffset" value=""/>
                          <Param name="daylightsavings" value=""/>
                       </Params>
                    </Data>
                 </Action>
                 <Action>
                    <Page>
                       <Params>
                          <Param name="~tid" value="1345811517165"/>
                          <Param name="~action-type" value="NAV"/>
                          <Param name="~from-page" value="login"/>
                          <Param name="~from-act" value="resetPassword"/>
                          <Param name="~to-page" value="login_resetPassword"/>
                       </Params>
                    </Page>
                 </Action>
                 <Action>
                    <Page>
                       <Params>
                          <Param name="~tid" value="1345811517165"/>
                          <Param name="~action-type" value="NAV"/>
                          <Param name="~from-page" value="login"/>
                          <Param name="~from-act" value="newUser"/>
                          <Param name="~to-page" value="login_newUser"/>
                       </Params>
                    </Page>
                 </Action>
</Response>

我使用的 XPath 是:

//Params[1]/Param[@name='~tid']/@value

它获取所有三个值。我怎样才能得到第一个?

【问题讨论】:

    标签: xpath xml-parsing


    【解决方案1】:

    试试

    /descendant::Params[1]/Param[@name='~tid']/@value
    

    来自W3C XPath specification

    注意:位置路径//para[1] 与位置路径/descendant::para[1] 的含义不同。后者选择第一个后代para元素;前者选择所有后代 para 元素,它们是其父母的第一个 para 孩子。

    【讨论】:

      【解决方案2】:

      这是 XPath 中第二多的常见问题解答

      使用

      (//Params/Param[@name='~tid'])[1]/@value 
      

      甚至

      (//Param[@name='~tid'])[1]/@value 
      

      解释

      XPath 伪运算符// 的优先级(优先级)低于[] 运算符。

      在任何语言中,当需要覆盖默认优先级时,通常的解决方案是使用括号明确指定新的、想要的优先级。

      【讨论】:

        猜你喜欢
        • 2010-12-09
        • 1970-01-01
        • 1970-01-01
        • 2019-10-08
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-02-19
        相关资源
        最近更新 更多