2

我希望你能帮助解决这个问题。我在网上尝试了许多 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

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

4

2 回答 2

1

尝试

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

来自W3C XPath 规范

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

于 2012-08-24T13:42:50.853 回答
0

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

使用

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

甚至

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

说明

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

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

于 2012-08-25T04:33:38.060 回答