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

3 つの値すべてを取得します。どうすれば最初のものだけを入手できますか?

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 で 2 番目に多い FAQです。

使用:

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

またはさらに

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

説明:

XPath 疑似演算子//は、演算子よりも優先度 (プライオリティ) が低くなり[]ます。

デフォルトの優先度を上書きする必要がある場合の言語での通常の解決策は、新しく必要な優先度を明示的に指定するブラケットを使用することです。

于 2012-08-25T04:33:38.060 に答える