package cn.redwave.dom4j;
import java.io.File;
import java.io.FileOutputStream;
import java.util.List;
import org.dom4j.Document;
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.Test;
/*
* @author redwave
* description:dom4j操作xml文档
* 2013-11-17
*/
public class testForDom4j {
@Test
public void read() throws Exception{
SAXReader reader = new SAXReader();
Document document = reader.read(new File("src/book.xml"));
Element root = document.getRootElement();
Element book = (Element)root.elements("书").get(1);
String value = book.element("书名").getText();
//String nameValue = book.element("书名").attribute("name").getValue();
String nameValue = book.element("书名").attributeValue("name");
System.out.println("书名dename是:"+nameValue);
}
//解决乱码问题 || sun io流的问题
@Test
public void write() throws Exception{
SAXReader reader = new SAXReader();
Document document = reader.read(new File("src/book.xml"));
Element book = document.getRootElement().element("书");
book.addElement("售价").setText("209元");
//格式化输出器
OutputFormat format = OutputFormat.createPrettyPrint();
format.setEncoding("gb2312");
//将内存中的document写到xml文档
//下面的FileWriter不能指定字符集,出现乱码
//XMLWriter writer = new XMLWriter(new FileWriter("src/book.xml"));
//*********第一种方式*************
// XMLWriter writer = new XMLWriter(new OutputStreamWriter(new FileOutputStream("src/book.xml"),"gb2312"),format);
// writer.write(document);
// writer.close();
XMLWriter writer = new XMLWriter(new FileOutputStream("src/book.xml"),format);
writer.write(document);
writer.close();
}
//在第一本书上添加 ||指定位置上添加
@Test
public void add() throws Exception{
SAXReader reader = new SAXReader();
Document document = reader.read(new File("src/book.xml"));
Element book = document.getRootElement().element("书");
List list = book.elements(); //保存所有孩子的集合 【书名、作者、售价】
Element price = DocumentHelper.createElement("售价");
price.setText("200元");
//在第三个位置添加
list.add(2, price);
//格式化输出器
OutputFormat format = OutputFormat.createPrettyPrint();
format.setEncoding("gb2312");
XMLWriter writer = new XMLWriter(new FileOutputStream("src/book.xml"),format);
writer.write(document);
writer.close();
}
@Test
public void delete() throws Exception{
SAXReader reader = new SAXReader();
Document document = reader.read(new File("src/book.xml"));
Element price = document.getRootElement().element("书").element("售价");
price.getParent().remove(price);
//格式化输出器
OutputFormat format = OutputFormat.createPrettyPrint();
format.setEncoding("gb2312");
XMLWriter writer = new XMLWriter(new FileOutputStream("src/book.xml"),format);
writer.write(document);
writer.close();
}
@Test
public void update()throws Exception{
SAXReader reader = new SAXReader();
Document document = reader.read(new File("src/book.xml"));
//得到第二本书
Element book = (Element)document.getRootElement().elements("书").get(1);
book.element("作者").setText("天天");
//格式化输出器
OutputFormat format = OutputFormat.createPrettyPrint();
format.setEncoding("gb2312");
XMLWriter writer = new XMLWriter(new FileOutputStream("src/book.xml"),format);
writer.write(document);
writer.close();
}
}