zoukankan      html  css  js  c++  java
  • dom4j中 selectSingleNode 或selectNodes获取不到节点的原因总结 (转)

    没想到搞个dom4j会出这么多怪错。。

          最近在研究XBRL GL的有关内容,在项目中要求吧XBRL GL导入到11179注册库中,根据11179建立数据库,然后从XBRL GL分类标准中导入数据到数据库。在导入过程中需要用到dom4j来读取XBRL GL文件,用selectnodes来选取制定的元素,发现总是空值,查看XPATH也没有错,着实困扰了很长时间。后来发现,原来是xmlns在作怪, 把xml文件开头的xmlns属性去掉,一切OK!

          另外,如果要选取当前节点的子节点,要用"./节点的相对路径"才能完成此任务。

     

     

    可能是因为XML文件带有命名空间.比如
    <web-app version="2.5" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">
     

    因为dom4j不能识别带命名空间的节点,所以在读取带命名空间的XML时,要在每个节点前加上命名空间,方法如下例子:


      Document doct=reader.read(xmlFile);
                                            HashMap nsMap=new HashMap();
                                            nsMap.put("ns","http://java.sun.com/xml/ns/jbi");          //加入命名空间
                                            //获取子节点
                                            XPath xsub=doct.createXPath("//ns:title");
                                            xsub.setNamespaceURIs(nsMap);
                                            Element element = (Element) xsub.selectSingleNode(doct);


    参考
    dom4j解析带命名空间的xml文件的节点的例子,只要给XPath设置默认的命名空间就行了

  • 相关阅读:
    函数式编程
    _.pick lodash
    Vue mixins extend
    js 导入json配置文件
    FormData
    shell中的调试与计算
    linux命令(6/10):find 命令
    Linux性能测试分析命令_sar+iostat+vmstat+top
    linux命令详解之(at)
    linux命令(6/9):watch命令
  • 原文地址:https://www.cnblogs.com/toSeeMyDream/p/5290843.html
Copyright © 2011-2022 走看看