Dom4j中使用Xpath检索不到数据

最近做xml解析比较多,由于之前接触文本数据源比较少,在解析过程中碰到了很多问题,这里记录下,供今后查询。也为碰到同样问题的同学提供一种解决问题的方向。
直接上干货~~~

原因分析

首先,再次确认下Node节点是否存在以及Xpath路径没有写错~~,可以另外找一个测试用的xml验证下。这个原因就不再多赘述了,这里想记录的是由于namespace没有设置正确导致取不到节点数据的解决办法。当然了,仅供参考咯。

解决办法

这里是自动添加namespace的方式,不多说,直接上代码~~~

Maven依赖:
<!-- dependency for parsing xml -->
   <dependency>
       <groupId>dom4j</groupId>
       <artifactId>dom4j</artifactId>
       <version>1.6.1</version>
   </dependency>
   <dependency>
       <groupId>jaxen</groupId>
       <artifactId>jaxen</artifactId>
       <version>1.2.0</version>
   </dependency>
伪代码:
public static void main(String[] args) throws Exception{
      Map map = new HashMap();
      SAXReader saxReader = new SAXReader();
      Document doc = reader.read(new File(xmlPath));
      Element root = doc.getRootElement();
      List content = root.content();
      for (Object o : content) {
          if (o.getClass().getName().equalsIgnoreCase(org.dom4j.Namespace.class.getName())) {
              Namespace e = (Namespace) o;
              String namespacePrefix = StringUtils.isEmpty(e.getPrefix()) ? "src" : e.getPrefix()
              String namespaceURI = e.getURI();
              System.out.println(namespacePrefix + ":" + namespaceURI);
              map.put(namespacePrefix, namespaceURI);
          }
      }
      reader.getDocumentFactory().setXPathNamespaceURIs(map);
		// 查询方式:
      List tmp = document.selectNodes("/src:report/src:list-property");
      System.out.println(tmp.size());
  }

主要添加完namespace后,相应的Xpath查询路径也要加上相应的namespace路径,切记了~~~

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值