XML的寫入_dom4j新增、刪除、修改Xml檔案內容
阿新 • • 發佈:2018-11-23
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();
}