2014-02-18 41 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