xpath无法获取具有命名空间的节点

时间:2013-09-24 18:52:45

标签: java xml xpath

我有一个巨大的xml文档。当我用xpath = // requestHeader测试时,返回结果如下:

  <requestHeader> 
      <!--Optional:-->  
      <req:clientCode xmlns:req="http://www.ibb.com/ws/requestHeader">?</req:clientCode>  
      <!--Optional:-->  
      <req:clientUsername xmlns:req="http://www.ibb.com/ws/requestHeader">CC</req:clientUsername>  
      <!--Optional:-->  
      <req:channel xmlns:req="http://www.ibb.com/ws/requestHeader">?</req:channel>  
      <!--Optional:-->  
    </requestHeader>

而且,我需要获取clientUsername值。不幸的是// requestHeader // req:clientUsername返回空字符串。这有什么问题?

你可以测试: http://www.xpathtester.com/test

2 个答案:

答案 0 :(得分:1)

尝试在req中指定namespaceContext

XPath.setNamespaceContext

答案 1 :(得分:0)

将您的命名空间放在xml文件的顶部,如下所示:

<?xml version="1.0" encoding="UTF-8"?>
<requestHeader  xmlns:req="http://www.ibb.com/ws/requestHeader"> 
  <!--Optional:-->  
  <req:clientCode>?</req:clientCode>  
  <!--Optional:-->  
  <req:clientUsername>CC</req:clientUsername>  
  <!--Optional:-->  
  <req:channel>?</req:channel>  
  <!--Optional:-->  
</requestHeader>

现在你可以像这样使用xpath

 //requestHeader/req:clientUsername