book.xml
<?xml version="1.0" encoding="gb2312"?>
<!DOCTYPE 書架 SYSTEM "book.dtd">
<書架>
<書>
<書名 name="xxx">Java就業培訓教程</書名>
<作者>張孝祥</作者>
</書>
<書>
<書名 name="yyy">JavaScript網頁開發</書名>
<作者>5</作者>
<售價>28.00元</售價>
</書>
</書架>
demo.java
import java.io.File;
import java.io.FileOutputStream;
import java.io.FileWriter;
import java.io.OutputStreamWriter;
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;
public class demo1 {
//讀第 1本書的信息
@Test
public void read() throws Exception
{
SAXReader reader = new SAXReader();
Document document = reader.read("book.xml");
Element book= (Element) document.getRootElement().elements("書").get(0);
String value=book.element("書名").getText();
String attributeValue=book.element("書名").attributeValue("name");
System.out.println(value +";"+attributeValue);
}
//在第一本上添加一個新的售價
@Test
public void add() throws Exception{
SAXReader reader=new SAXReader();
Document document=reader.read(new File("book.xml"));
Element book=document.getRootElement().element("書");
book.addElement("售價").setText("222");
OutputFormat format = OutputFormat.createPrettyPrint();
format.setEncoding("gb2312");
XMLWriter writer=new XMLWriter(new FileOutputStream("book.xml"), format);
writer.write(document);
writer.close();
}
//在第一本書指定位置上添加一個新的售價,更改List集合
@Test
public void add2() throws Exception{
SAXReader reader=new SAXReader();
Document document=reader.read(new File("book.xml"));
Element book=document.getRootElement().element("書");
List list=book.elements();//[書名,作者,售價]
Element price=DocumentHelper.createElement("售價0");
price.setText("309元");
list.add(0,price);
OutputFormat format = OutputFormat.createPrettyPrint();
format.setEncoding("gb2312");
XMLWriter writer=new XMLWriter(new FileOutputStream("book.xml"), format);
writer.write(document);
writer.close();
}
//刪除上面的節點
@Test
public void delete() throws Exception {
SAXReader reader=new SAXReader();
Document document=reader.read(new File("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("book.xml"), format);
writer.write(document);
writer.close();
}
//更新節點
@Test
public void update() throws Exception{
SAXReader reader=new SAXReader();
Document document=reader.read(new File("book.xml"));
Element book=(Element) document.getRootElement().elements("書").get(1);
book.element("作者").setText("5");
OutputFormat format = OutputFormat.createPrettyPrint();
format.setEncoding("gb2312");
XMLWriter writer=new XMLWriter(new FileOutputStream("book.xml"), format);
writer.write(document);
writer.close();
}
}
解決亂碼問題:
// format.setEncoding("gb2312");
// XMLWriter writer=new XMLWriter(new FileWriter("book.xml"), format);//因爲FileWriter的默認編碼是gb2312,所以format的編碼格式只能設置成gb2312
// format.setEncoding("utf-8"); //gb2312
// XMLWriter writer=new XMLWriter(new OutputStreamWriter(new FileOutputStream("book.xml"),"utf-8"), format);//gb2312
// format.setEncoding("utf-8");//gb2312
// XMLWriter writer=new XMLWriter(new FileOutputStream("book.xml"), format);//FileOutputStream會去查format的編碼