创建Document文档对象
DocumentHelper.createDocument();
写出内容到xml文档
XMLWriter writer = new XMLWriter(OuputStream, OutputFormat);
writer.write(Document);
修改xml文档的API
增加:
DocumentHelper.createDocument();//增加文档
addElement("标签名");//增加标签
addAttribute("属性名", “属性值”);//增加属性
addText("文本内容");//增加文本
修改:
Attribute.setValue("属性值");
//
修改属性值
Element.addAttribute("同名的属性名", "属性值");//通过增加同名属性的方法,覆盖修改属性值
Element.setText("文本内容");//修改文本内容
删除:
Element.detach();//删除标签。自杀
父标签.remove("子标签");//删除标签。他杀
Atrribute.detach();//删除属性。自杀
当前标签.remove("属性");//删除标签。remove
Demo:
package com.dom4j.write;
import java.io.File;
import java.io.FileOutputStream;
import org.dom4j.Attribute;
import org.dom4j.Document;
import org.dom4j.DocumentException;
import org.dom4j.DocumentHelper;
import org.dom4j.Element;
import org.dom4j.io.OutputFormat;
import org.dom4j.io.SAXReader;
import org.dom4j.io.XMLWriter;
import org.junit.After;
import org.junit.Before;
import org.junit.BeforeClass;
import org.junit.Test;
/**
* 写出内容到xml文档
* @author zhiyong
*
*/
public class Demo1 {
public static Document document;
/**
* 首先加载或者创建一个Document对象
* @throws DocumentException
*/
@Before
public void beforeTest() throws Exception{
/*
* 1.读取或者创建一个Document对象
*/
//读取"/src/contact2.xml"文件
SAXReader reader = new SAXReader();
//获取Document对象
document = reader.read(new File("./src/contact2.xml"));
/**
*DocumentHelper.createDocument();创建Document文档对象
*/
// document = DocumentHelper.createDocument();
}
/*
*2. 修改Document对象内容
* 增加:标签、属性
* 修改:属性值、文本
* 删除:标签、属性
*/
/**
* 增加:标签、属性
* @throws Exception
*/
@Test
public void testAdd() throws Exception {
/*
* 增加:标签
*/
Element root = document.addElement("contactList");//一个xml文档只能存在一个根标签
Element ele1 = root.addElement("contact");
/*
* 添加属性:
*/
ele1.addAttribute("id", "001");
ele1.addAttribute("name", "contactName");
Element child01 = ele1.addElement("name");
/*
* 添加文本
*/
child01.addText("木丁西");
Element child02 = ele1.addElement("age");
child02.addText("18");
Element child03 = ele1.addElement("email");
child03.addText("1012421396@qq.com");
Element child04 = ele1.addElement("qq");
child04.addText("1012421396");
Element ele2 = root.addElement("contact");
ele2.addAttribute("id", "002");
Element child11 = ele2.addElement("name");
child11.addText("刘先森");
Element child12 = ele2.addElement("age");
child12.addText("22");
Element child13 = ele2.addElement("email");
child13.addText("541247820@qq.com");
Element child14 = ele2.addElement("qq");
child14.addText("101242134");
}
/**
* 修改:属性值、文本
* @throws Exception
*/
@Test
public void testUpdate() throws Exception {
/*
* 修改属性值
*方案1:1.得到标签对象 2.得到属性对象 3.修改属性值 【推荐】
*/
//获取标签对象
Element contactEle = document.getRootElement().element("contact");
//得到属性对象
Attribute idAttr = contactEle.attribute("id");
//修改属性值
idAttr.setValue("003");
/*
* 方案2:修改属性值:1.得到标签对象 2.直接修改【不推荐使用】
*/
contactEle.setAttributeValue("id", "004");
/*
* 方法3:修改属性值:1.得到标签对象 2.通过增加同名属性的方法,覆盖修改属性值
*/
contactEle.addAttribute("id", "005");
/*
* 修改文本
*方案1:1.得到标签对象 2..修改文本
*/
Element nameEle = document.getRootElement().element("contact").element("name");
nameEle.setText("曾用名");
}
/**
* 删除:标签、属性
* @throws Exception
*/
@Test
public void testDelete() throws Exception {
/*
* 删除标签方式1:1.获取标签对象 2.删除(自杀)
*/
/* //获取标签对象
Element emailEle = document.getRootElement().element("contact").element("email");
//删除标签。自杀
emailEle.detach();*/
/*
* 删除标签方式2:1.获取标签对象的父标签 2.删除子标签
*/
//拿到第2个contact标签对象,再获取“name”标签
Element nameEle = document.getRootElement().elementByID("002").element("name");
Element nameParent = nameEle.getParent();
nameParent.remove(nameEle);
/*
* 删除属性方式1:1.找到属性标签对象 2.删除属性
*/
//拿到第2个contact标签对象
Element contactEle2 = (Element)document.getRootElement().elements("contact").get(1);
Attribute idAttr = contactEle2.attribute("id");//获取id属性对象
idAttr.detach();//自杀
/*
* 删除属性方式2:1.找到属性标签对象 2.remove删除对象
*/
contactEle2.remove(idAttr);
}
/**
* 3.最后把修改后的Document对象写出到xml文档中
*/
@After
public void testAfter() throws Exception {
//指定文件输出的位置
FileOutputStream out = new FileOutputStream("./src/contact4.xml");
/*
* 指定写出的格式
*/
// OutputFormat format = OutputFormat.createCompactFormat();//紧凑的格式,去除了空格和换行。占用容量小。项目上线的时候用
OutputFormat format = OutputFormat.createPrettyPrint();//漂亮格式,包含空格和换行。占用容量大。开发调试的时候用
/*
* 指定生成文档的编码格式
* 同时影响了xml文档保存时的编码和xml文档声明的encoding的编码(xml解析时的编码)
* 结论:使用该方法生成的XML文档可以避免中文乱码问题
*/
format.setEncoding("utf-8");
//创建写出对象
// XMLWriter writer = new XMLWriter(out);
XMLWriter writer = new XMLWriter(out, format);
writer.write(document);
//关闭资源原则:先开后关,后开后关
writer.close();
out.close();
}
}
效果: