dom4j解析xml,xml数据替换,生成新的xml

Posted 小蜗牛爱远行

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了dom4j解析xml,xml数据替换,生成新的xml相关的知识,希望对你有一定的参考价值。

  • 记录一次使用dom4j处理xml

  • dom4解析xml:

    • java项目pom文件中引入插件

      • <dependency>
            <groupId>dom4j</groupId>
            <artifactId>dom4j</artifactId>
            <version>1.6.1</version>
        </dependency>
        
    • 示例xml:

      • <?xml version="1.0"?>
        <license>
            <catalog catalogId="d2434f9aff6a43fa9" catalogName="test" templateId="257d191dca684ee8968a" templateName="test" version="2014V2.0"/>
            <surface>
                <item alias="issueUnitname" catetype="0" name="test1" require="1" value="孝感市自然资源和规划局"/>
                <item alias="licenseNumber" catetype="0" name="test2" require="1" value=""/>
                <item alias="issueDate" catetype="0" name="test3" require="1" value=""/>
                <item alias="validTimeBegin" catetype="0" name="test4" require="1" value=""/>
            </surface>
            <items>
                <item alias="item_Code" name="test5" value=""/>
                <item alias="project_No" name="test6" value=""/>
            </items>
        </license>
        
    • 解析替换xml属性值的代码:

      • import org.dom4j.Document;
        import org.dom4j.DocumentHelper;
        import org.dom4j.Element;
        import org.dom4j.io.OutputFormat;
        import org.dom4j.io.XMLWriter
        
        public String modifyXml(String xml, Map<String, Object> titleValueMap)
            //最终输出修改后的xml字符串数据
            String saveXml = "";
            Document doc = null;
            try 
                // 将字符串转为XML
                doc = DocumentHelper.parseText(xml);
                // 获取根节点
                Element rootElt = doc.getRootElement();
                //获取根节点下的子节点body
                Iterator<Element> surface = rootElt.elementIterator("surface");
                // 遍历body节点
                while (surface.hasNext()) 
                    Element nextNodes = surface.next();
                    List<Element> items = nextNodes.content();
                    if (items.size() > 0)
                        for (Element item : items) 
                            String title = item.attributeValue("name");
                            if (titleValueMap.containsKey(title))
                                item.addAttribute("value", titleValueMap.get(title).toString());
                            
                        
                    
                
             catch (Exception e) 
                log.error("解析XML报错:", e);
                e.printStackTrace();
            
            try(ByteArrayOutputStream os = new ByteArrayOutputStream())
                OutputFormat format = new OutputFormat("", true, "UTF-8");
                XMLWriter writer = new XMLWriter(os, format);
                writer.write(doc);
                saveXml = os.toString();
             catch (IOException e) 
                log.error("XML转字符串报错:", e);
                e.printStackTrace();
            
            return saveXml;
        
        
        
  • dom4j常用接口:

    • Attribute定义了 XML 的属性。
      Branch指能够包含子节点的节点。如XML元素(Element)和文档(Docuemnts)定义了一个公共的行为
      CDATA定义了 XML CDATA 区域
      CharacterData是一个标识接口,标识基于字符的节点。如CDATA,Comment, Text.
      Comment定义了 XML 注释的行为
      Document定义了XML 文档
      DocumentType定义 XML DOCTYPE 声明
      Element定义XML 元素
      ElementHandler定义了Element 对象的处理器
      ElementPath被 ElementHandler 使用,用于取得当前正在处理的路径层次信息
      Entity定义 XML entity
      Node为dom4j中所有的XML节点定义了多态行为
      NodeFilter定义了在dom4j 节点中产生的一个滤镜或谓词的行为(predicate)
      ProcessingInstruction定义 XML 处理指令
      Text定义 XML 文本节点
      Visitor用于实现 Visitor模式
      XPath在分析一个字符串后会提供一个 XPath 表达式

以上是关于dom4j解析xml,xml数据替换,生成新的xml的主要内容,如果未能解决你的问题,请参考以下文章

用dom4j生成xml文件。以字符串输出的问题

dom4j解析和生成XML文档

成都校区Dom4J解析XML的范例浅析

dom4j 解析生成xml 案例

Dom4j常用解析函数

dom4j解析xml文件,红框里面的是干嘛用的。