1. 程式人生 > >XML的寫入_dom4j新增、刪除、修改Xml檔案內容

XML的寫入_dom4j新增、刪除、修改Xml檔案內容

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();
    }