XML解析-Dom4j的DOM解析方式更新XML

Dom4j工具,是非官方的,不在jdk中。

使用步骤:

1)导入dom4j的核心包。 dom4j-1.6.1.jar

2)编写Dom4j读取xml文件代码


1、更新XML

1.1、写出内容到xml文档

package com.rk.xml.g_dom4j_write;
 
import java.io.File;
import java.io.FileOutputStream;
 
import org.dom4j.Document;
import org.dom4j.io.SAXReader;
import org.dom4j.io.XMLWriter;
 
/**
 * 第一个写出内容到xml文档
 * @author RK
 *
 */
public class Demo01
{
    public static void main(String[] args) throws Exception
    {
        //一、读取或创建一个Document对象
        Document doc = new SAXReader().read(new File("./src/animals.xml"));
         
        //二、修改Document对象内容
         
        //三、把修改后的Document对象写出到xml文档中
        //指定文件输出的位置
        FileOutputStream outStream = new FileOutputStream("D:/rk/result.xml");
        //1.创建写出对象
        XMLWriter writer = new XMLWriter(outStream);
        //2.写出Document对象
        writer.write(doc);
        //3.关闭流
        writer.close();
        System.out.println("执行结束!");
    }
}


1.2、写出内容到xml文档的细节

package com.rk.xml.g_dom4j_write;
 
import java.io.File;
import java.io.FileOutputStream;
import org.dom4j.Document;
import org.dom4j.io.OutputFormat;
import org.dom4j.io.SAXReader;
import org.dom4j.io.XMLWriter;
 
/**
 * 讨论写出内容到xml文档的细节
 * @author RK
 *
 */
public class Demo02
{
    public static void main(String[] args) throws Exception
    {
        Document doc = new SAXReader().read(new File("./src/animals2.xml"));
         
        /**
         * 1.指定写出的格式
         */
//      OutputFormat format = OutputFormat.createCompactFormat();//紧凑的格式.去除空格换行.项目上线的时候
        OutputFormat format = OutputFormat.createPrettyPrint();//漂亮的格式.有空格和换行.开发调试的时候
        /**
         * 2.指定生成的xml文档的编码
         *    同时影响了xml文档保存时的编码  和  xml文档声明的encoding的编码(xml解析时的编码)
         *    结论: 使用该方法生成的xml文档避免中文乱码问题。
         */
        format.setEncoding("UTF-8");
         
        //指定文件输出的位置
        FileOutputStream outStream = new FileOutputStream("D:/rk/result.xml");
        //1.创建写出对象
        XMLWriter writer = new XMLWriter(outStream,format);
        //2.写出Document对象
        writer.write(doc);
        //3.关闭流
        writer.close();
        System.out.println("执行结束!");
    }
}


1.3、修改xml内容:添加、修改、删除

package com.rk.xml.g_dom4j_write;
 
import java.io.File;
import java.io.FileOutputStream;
 
import org.dom4j.Document;
import org.dom4j.DocumentHelper;
import org.dom4j.Node;
import org.dom4j.Element;
import org.dom4j.Attribute;
import org.dom4j.Text;
import org.dom4j.io.SAXReader;
import org.dom4j.io.XMLWriter;
import org.dom4j.io.OutputFormat;
import org.junit.Test;
 
/**
 * 修改xml内容
 * 增加:文档,标签属性
 * 修改属性值,文本
 * 删除标签属性
 * @author RK
 *
 */
public class Demo03
{
    /**
     * 增加:文档,标签属性
     */
    @Test
    public void testAdd() throws Exception
    {
        //1.创建文档
        Document doc = DocumentHelper.createDocument();
         
        //2.增加标签
        Element rootElement = doc.addElement("ContactList");
        Element contactElement = rootElement.addElement("Contact");
        Element nameElement = contactElement.addElement("Name");
        nameElement.setText("小明");
         
        //3.增加属性
        contactElement.addAttribute("id","c001");
        contactElement.addAttribute("region","北京");
         
        //把修改后的Document对象写出到xml文档中
        FileOutputStream out = new FileOutputStream("D:/rk/contact.xml");
        OutputFormat format = OutputFormat.createPrettyPrint();
        format.setEncoding("utf-8");
        XMLWriter writer = new XMLWriter(out,format);
        writer.write(doc);
        writer.close();
        System.out.println("执行结束!");
    }
 
    /**
     * 修改属性值,文本
     */
    @Test
    public void testModify() throws Exception
    {
        Document doc = new SAXReader().read(new File("./src/animals.xml"));
        /**
         * 方案一: 修改属性值   1.得到标签对象 2.得到属性对象 3.修改属性值
         */
        //1.1  得到标签对象
        Element catElement = doc.getRootElement().element("Cat");
        //1.2 得到属性对象
        Attribute catAttr = catElement.attribute("id");
        //1.3 修改属性值
        catAttr.setValue("c100");
         
        /**
         * 方案二: 修改属性值
         */
        //2.1  得到标签对象
        Element dogElement = doc.getRootElement().element("Dog");
        //2.2 通过增加同名属性方法修改属性值
        dogElement.addAttribute("id","d100");
         
        /**
         * 修改文本 1.得到标签对象 2.修改文本
         */
        Element nameElement = doc.getRootElement().element("Cat").element("Home");
        nameElement.setText("第六宇宙");
         
        FileOutputStream out = new FileOutputStream("D:/rk/Animals.xml");
        OutputFormat format = OutputFormat.createPrettyPrint();
        format.setEncoding("utf-8");
        XMLWriter writer = new XMLWriter(out,format);
        writer.write(doc);
        writer.close();
        System.out.println("执行结束!");
    }
 
    /**
     * 删除标签属性
     */
    @Test
    public void testDelete() throws Exception
    {
        Document doc = new SAXReader().read(new File("./src/animals.xml"));
        /**
         * 1.删除标签     1.1 得到标签对象  1.2 删除标签对象    
         */
        // 1.1 得到标签对象
        Element nameElement = doc.getRootElement().element("Cat").element("Home");
        //1.2 删除标签对象
        nameElement.detach();
//      nameElement.getParent().remove(nameElement);
         
        /**
         * 2.删除属性   2.1得到属性对象  2.2 删除属性
         */
        Element catElement = doc.getRootElement().element("Cat");
        //2.1得到属性对象
        Attribute idAttr = catElement.attribute("id");
        //2.2 删除属性
        idAttr.detach();
//      idAttr.getParent().remove(idAttr);
         
        FileOutputStream out = new FileOutputStream("D:/rk/animals.xml");
        OutputFormat format = OutputFormat.createPrettyPrint();
        format.setEncoding("utf-8");
        XMLWriter writer = new XMLWriter(out,format);
        writer.write(doc);
        writer.close();
        System.out.println("执行结束!");
    }
}

2、思维导图

相关文章

php输出xml格式字符串
J2ME Mobile 3D入门教程系列文章之一
XML轻松学习手册
XML入门的常见问题(一)
XML入门的常见问题(三)
XML轻松学习手册(2)XML概念