2012-08-24 40 views
2

我希望你能幫助解決這個問題。我在網上嘗試了一些XPath測試人員,但無法找到解決方案。獲取XML節點匹配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 

它獲得所有三個值。我怎樣才能得到第一個?

回答

1

嘗試

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

W3C XPath specification

注:位置路徑//para[1]並不意味着一樣的位置路徑/descendant::para[1]。後者選擇第一個後裔para元素;前者選擇所有後代para元素,這是父母的第一個para孩子。

+0

就是這樣。謝謝... – genevish

0

這是XPath中的第二大常見問題

使用

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

甚至

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

說明

中的XPath僞操作//比低優先級(優先級) 10個操作員。

當默認優先級需要被覆蓋時,任何語言的通常解決方案是使用明確指定新的所需優先級的括號。