Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/xpath/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
获取与XPath表达式匹配的XML节点_Xpath_Xml Parsing - Fatal编程技术网

获取与XPath表达式匹配的XML节点

获取与XPath表达式匹配的XML节点,xpath,xml-parsing,Xpath,Xml Parsing,我希望你能帮上忙。我在网上尝试了许多XPath测试人员,但没有找到解决方案 我试图从以下XML中获取第一个具有“~tid”属性的节点的值: <Response status="ok" version="1.1"> <Action> <Page> <Params> <Para

我希望你能帮上忙。我在网上尝试了许多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>
它获取所有三个值。我怎样才能得到第一个呢?

试试看

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

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


这是XPath中第二大常见问题

使用

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

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

(//Params/Param[@name='~tid'])[1]/@value 
(//Param[@name='~tid'])[1]/@value 
XPath伪运算符
/
的优先级(优先级)低于
[]
运算符

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