2014-02-18 40 views
0

XPATH://requestHeader//*[local-name()='clientUsername']的XPath無法正常工作

<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" 
    xmlns:req="http://www.ABC.com/ws/requestHeader" 
    xmlns:web="http://com/ABC/XXX/YYY"> 
    <soapenv:Header/> 
    <soapenv:Body> 
    <web:isServiceUp> 
     <web:requestHeader> 
     <req:clientUsername>GENT</req:clientUsername> 
     <req:languageCode>?</req:languageCode> 
     </web:requestHeader> 
    </web:isServiceUp> 
    </soapenv:Body> 
</soapenv:Envelope> 

它假設是返回GENT但它返回空字符串...

回答

2

您需要具備以下條件:

//web:requestHeader//*[local-name()='clientUsername'] 

你需要尋找web:requestHeader並不僅僅是requestHeader

您可以測試這一點here。試用它只需requestHeader,你會發現它什麼都沒有返回。當您將其更改爲web:requestHeader時,您將獲得要查找的元素。

+1

+1爲測試鏈接=) – Koitoer

2

試試這一個。

//web:requestHeader/req:clientUsername 
1

requestHeader元素在http://com/ABC/XXX/YYY命名空間,所以//requestHeader不會找到它(即XPath是尋找沒有命名空間命名requestHeader的元素)。您或者需要執行與clientUsername相同的操作local-name(),或者使用您的XPath庫提供的任何機制來設置適當的前綴綁定,然後在表達式中使用該前綴。

您已經標記了您的問題「java」,因此如果您使用的是javax.xml.xpath,則需要查看setNamespaceContext method on XPath