xpath无法正常工作

时间:2014-02-18 23:00:11

标签: java xpath

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

<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但它返回空字符串......

3 个答案:

答案 0 :(得分:2)

试试这个。

//web:requestHeader/req:clientUsername

答案 1 :(得分:2)

您需要具备以下条件:

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

您需要查找web:requestHeader而不仅仅是requestHeader

您可以对此进行测试here。只需requestHeader即可试用,您会发现它什么也没有返回。当您将其更改为web:requestHeader时,您将获得您正在寻找的元素。

答案 2 :(得分:1)

requestHeader元素位于http://com/ABC/XXX/YYY命名空间中,因此//requestHeader找不到它(XPath正在 no <中寻找名为requestHeader的元素/ em> namespace)。您需要使用local-name()执行相同的clientUsername技巧,或者使用XPath库提供的任何机制设置适当的前缀绑定,然后在表达式中使用该前缀。

您已将问题标记为“java”,因此如果您使用javax.xml.xpath,则需要查找setNamespaceContext method on XPath