2017-02-24 18 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一小。

您的XPath試圖尋址作爲get:name的後代的get:value元素,而不是兄弟姐妹。此舉被過濾get:name成謂詞的標準,然後下臺爲get:value

/*[ 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()