• 06_XML的写入_dom4j添加、删除、修改Xml文件内容


    【工程截图】

    【person.xml】准备一个xml文件

    复制代码
    <?xml version="1.0" encoding="UTF-8"?>
    <students>
        <student id="88888" phone="15888888888" sex="男">
            <name>张三</name>
            <age>18</age>
            <school>清华</school>
        </student>
        <student id="99999" phone="15999999999" sex="女">
            <name>李四</name>
            <age>28</age>
            <school>北大</school>
        </student>
        <AAAA>
            <aa1>aa111</aa1>
            <aa2>aa222</aa2>
        </AAAA>
        <BBBB></BBBB>
    </students>
    复制代码

    【读取原有Xml文件的内容,然后将数据写入到磁盘上】

    复制代码
    package com.Higgin.dom4j;
    
    import java.io.File;
    import java.io.FileOutputStream;
    import java.io.IOException;
    import org.dom4j.Document;
    import org.dom4j.DocumentException;
    import org.dom4j.io.SAXReader;
    import org.dom4j.io.XMLWriter;
    /**
     *  读出原有xml文件的内容数据,然后将数据写入到磁盘上的XML文件
     */
    public class WriteDemo01 {
        
        public static void main(String[] args) throws DocumentException, IOException {
            //读取已存在的Xml文件person.xml
            Document doc=new SAXReader().read(new File("./src/person.xml"));
            
            //指定文件输出的位置
            FileOutputStream out =new FileOutputStream("d:/student.xml");
            
            //1.创建写出对象
           XMLWriter writer=new XMLWriter(out);
           
           //2.写出Document对象
           writer.write(doc);
           
           //3.关闭流
           writer.close();
        }
    }
    复制代码

    【运行结果】内容和person.xml一致

    【按照设定的格式将xml内容输出保存到对应的磁盘地址上】

    复制代码
    package com.Higgin.dom4j;
    
    import java.io.File;
    import java.io.FileOutputStream;
    import java.io.IOException;
    
    import org.dom4j.Document;
    import org.dom4j.DocumentException;
    import org.dom4j.io.OutputFormat;
    import org.dom4j.io.SAXReader;
    import org.dom4j.io.XMLWriter;
    
    /**
     *  1.读出原有xml文件的内容数据,保存至Document对象
     *  2.修改输出的format(输出格式、编码...)
     *  3.然后将document包含数据写入到磁盘上的XML文件
     */
    public class WriteDemo02 {
        
        public static void main(String[] args) throws DocumentException, IOException {
            //读取已存在的Xml文件person.xml
            Document doc=new SAXReader().read(new File("./src/person.xml"));
            
            //指定文件输出的位置
            FileOutputStream out =new FileOutputStream("d:/student.xml");
            /**
             *  指定文本的写出的格式:
             *      紧凑格式 :项目上线时候使用
             *      漂亮格式:开发调试的时候使用
             */
            //OutputFormat format=OutputFormat.createCompactFormat();  //紧凑格式:去除空格换行
            OutputFormat format=OutputFormat.createPrettyPrint();   //漂亮格式:有空格换行
            
            /**
             * 指定生成的xml文档的编码影响了:
             *         1.xml文档保存时的编码
             *         2.xml文档声明的encoding编码(Xml解析时的编码)
             * 结论:使用该方法生成Xml文档可以避免中文乱码问题
             */
            format.setEncoding("UTF-8");
            
            //1.创建写出对象
           XMLWriter writer=new XMLWriter(out,format);
           
           //2.写出Document对象
           writer.write(doc);
           
           //3.关闭流
           writer.close();
        }
    }
    复制代码

    【运行结果】

    同样在D盘下生成了一个student.xml文件

     1.紧凑格式:

    2.漂亮格式

    3.注意:

    /**
    * 指定生成的xml文档的编码影响了:
    * 1.xml文档保存时的编码
    * 2.xml文档声明的encoding编码(Xml解析时的编码)
    * 结论:使用该方法生成Xml文档可以避免中文乱码问题
    */

    增、删、改 Xml文件

    /**
    * 1.创建Document对象,
    * 添加:各种标签、属性、文本
    * 修改:属性值、文本
    * 删除:标签、属性
    * 2.修改输出的format(输出格式、编码...)
    * 3.然后将document包含数据写入到磁盘上的XML文件
    */

    【增加:文档、标签、属性】

    复制代码
        /**
         * 增加:文档、标签、属性 
         */
        @Test
        public void testAdd() throws DocumentException, IOException {
            //1.创建文档
            Document doc=DocumentHelper.createDocument();
            //2.添加标签
            Element rootElem=doc.addElement("root");
            Element stuElem=rootElem.addElement("student");
            stuElem.addElement("name");
            //4.增加属性
            stuElem.addAttribute("id", "88888");
            stuElem.addAttribute("sex", "男");
            //指定文件输出的位置
            FileOutputStream out =new FileOutputStream("d:/student.xml");
            
            // 指定文本的写出的格式:
            OutputFormat format=OutputFormat.createPrettyPrint();   //漂亮格式:有空格换行
            format.setEncoding("UTF-8");
            
            //1.创建写出对象
            XMLWriter writer=new XMLWriter(out,format);
               
            //2.写出Document对象
            writer.write(doc);
            
            //3.关闭流
            writer.close();
        }
    复制代码

    【运行结果】

    【修改:属性值、文本】

    复制代码
        /**
         * 修改:属性值、文本
         */
        @Test
        public void testUpdate() throws DocumentException, IOException{
            //创建Document对象,读取已存在的Xml文件person.xml
            Document doc=new SAXReader().read(new File("./src/person.xml"));
            
            /**
             * 修改属性值(方案一)   
             * 方法:使用Attribute类(属性类)的setValue()方法
             * 1.得到标签对象
             * 2.得到属性对象
             * 3.修改属性值
             */
        /*    //1.1 得到标签对象
            Element stuElem=doc.getRootElement().element("student");
            //1.2 得到id属性对象
            Attribute idAttr=stuElem.attribute("id");
            //1.3 修改属性值
            idAttr.setValue("000001"); 
        */
            
            /**
             *  修改属性值(方案二)
             *  方法:Element标签类的addAttribute("attr","value")方法
             */
        /*    //1.得到属性值标签
            Element stuElem=doc.getRootElement().element("student");
            //2.通过增加同名属性的方法,修改属性值
            stuElem.addAttribute("id", "000009");  //key相同,覆盖;不存在key,则添加
         */
            /**
             * 修改文本
             * 方法:Element标签类的setTest("新文本值")方法
             * 1.得到标签对象
             * 2.修改文本
             */
            Element nameElem=doc.getRootElement().element("student").element("name");
            nameElem.setText("王二麻子");
            
            //指定文件输出的位置
            FileOutputStream out =new FileOutputStream("d:/student.xml");
            // 指定文本的写出的格式:
            OutputFormat format=OutputFormat.createPrettyPrint();   //漂亮格式:有空格换行
            format.setEncoding("UTF-8");
            //1.创建写出对象
            XMLWriter writer=new XMLWriter(out,format);
            //2.写出Document对象
            writer.write(doc);
            //3.关闭流
            writer.close();
        }
    复制代码

    【删除:标签、属性】

    复制代码
        /**
         * 删除:标签、属性
         */
        @Test
        public void testDelete() throws DocumentException, IOException{
            //创建Document对象,读取已存在的Xml文件person.xml
            Document doc=new SAXReader().read(new File("./src/person.xml"));
            
            /**
             * 删除标签
             * 1.得到标签对象
             * 2.删除标签对象(可以通过父类删除子标签,也可以自己删自己)
             */
    /*        Element ageElement=doc.getRootElement().element("student").element("age");
             ageElement.detach();  //直接detch()删除
            //ageElement.getParent().remove(ageElement); //先获取父标签,然后remove()删除子标签
    */
            /**
             * 删除属性
             */
            //1.得到标签对象
            //等同于Element stuElem=doc.getRootElement().element("student");
            Element stuElem=(Element) doc.getRootElement().elements().get(0);
            //2.得到属性对象
            Attribute idAttr=stuElem.attribute("id");
            //3.删除属性
            idAttr.detach();
            
            
            //指定文件输出的位置
            FileOutputStream out =new FileOutputStream("d:/student.xml");
            // 指定文本的写出的格式:
            OutputFormat format=OutputFormat.createPrettyPrint();   //漂亮格式:有空格换行
            format.setEncoding("UTF-8");
            //1.创建写出对象
            XMLWriter writer=new XMLWriter(out,format);
            //2.写出Document对象
            writer.write(doc);
            //3.关闭流
            writer.close();
        }
    复制代码
  • 相关阅读:
    QTP中选中页面提示ActiveX无法显示
    今天的突然奇想——我想自己做个bug管理工具
    问题解决:Target runtime Apache Tomcat v6.0 is not defined
    java异常类子类和父类的关系
    android与后台服务器连接:android.os.NetworkOnMainThreadException
    struts初探
    eclipse启动Tomcat问题:严重: Socket accept failed
    eclipse启动报错:java was started but returned code=13
    console.log是异步么?
    字符串函数 replace() 方法妙用
  • 原文地址:https://www.cnblogs.com/qianqiu-1026/p/8856081.html
Copyright © 2020-2023  润新知