我希望你能帮忙解决这个问题。我在线尝试了许多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
它获得所有三个值。我怎样才能得到第一个?
答案 0 :(得分:1)
尝试
/descendant::Params[1]/Param[@name='~tid']/@value
注意:位置路径
//para[1]
与位置路径/descendant::para[1]
的含义不同。后者选择第一个后代para
元素;前者选择所有后代para
元素,这些元素是父母的第一个para
子元素。
答案 1 :(得分:0)
这是XPath中第二大常见问题解答。
使用强>:
(//Params/Param[@name='~tid'])[1]/@value
甚至:
(//Param[@name='~tid'])[1]/@value
<强>解释强>:
XPath伪运算符//
的优先级(优先级)低于[]
运算符。
当需要覆盖默认优先级时,任何语言中的常用解决方案是使用明确指定新的所需优先级的括号。