2017-02-24 8 views
2

私はxml以下でしたが、名前が 'test2'と一致する 'Value'タグの値を読みたいと思います。私は以下のxpathを使用していますが、動作しませんでした。誰かが助けることができる?これは動作するはず兄弟の値に基づいて値を読み取るxpath式

/*[ local-name()='OutputData']/*[ local-name()='OutputDataItem']/*[ local-name()='Name'][normalize-space(.) = 'test2']//*[local-name()='Value']/text()

   <get:OutputData> 
       <get:OutputDataItem> 
       <get:Name>test1</get:Name> 
       <get:Value/> 
       </get:OutputDataItem> 
       <get:OutputDataItem> 
       <get:Name>test2</get:Name> 
       <get:Value>B5B4</get:Value> 
       </get:OutputDataItem> 
       <get:OutputDataItem> 
       <get:Name>test3</get:Name> 
       <get:Value/> 
       </get:OutputDataItem> 
       <get:OutputDataItem> 
       <get:Name>OP_VCscEncrptCd_VAR</get:Name> 
       <get:Value/> 
       </get:OutputDataItem>     
      </get:OutputData> 

おかげ

答えて

2

私は思う:

//*[local-name()="get:Name" and text()="test2"]/following-sibling::*[local-name()="get:Value"]/text() 
+0

ありがとう、それは働いている – techq

+0

np、それがあなたを助けた場合は受け入れることを忘れないでください – eLRuLL

2

あなたが近くにあったが、get:nameget:valueが兄弟であるので、あなたはあなたのXPath aを調整する必要があります少し。

XPathは、兄弟としてではなくget:nameの子孫であったget:valueの要素に対処しようとしていました。 get:valueにステップダウンし、その後、述語にget:nameをフィルタリングされた基準を動かし:

/*[ local-name()='OutputData']/*[ local-name()='OutputDataItem'] 
    [*[ local-name()='Name'][normalize-space(.) = 'test2']]/*[local-name()='Value']/text() 

あなたはまた、get:nameに述語フィルタの基準を組み合わせて、andを使用することができます。

/*[ local-name()='OutputData']/*[ local-name()='OutputDataItem'] 
    [*[ local-name()='Name' and normalize-space(.) = 'test2']]/*[local-name()='Value']/text() 
関連する問題