先看一個book.xml檔案:
<?xml version="1.0" encoding="utf-8"?>
<書架>
<書>
<書名 id="a1">javaweb開發</書名>
<作者 name="zxx">張孝祥</作者>
<售價>69.0元</售價>
</書>
<書名 id="a2">java開發</書名>
<作者 name="老張">張孝祥</作者>
</書>
</書架>
下面是對這個xml檔案的一些常見操作:
package cn.itcast.dom4j;
import java.io.fileoutputstream;
import java.io.outputstreamwriter;
import java.io.writer;
import java.util.list;
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.test;
// dom4j 增删改查
public class dom4jdemo {
// 查找第一本書的名字
@test
public void find() throws exception {
// 1.建立解析器對象
saxreader reader = new saxreader();
// 2.解析一個xml
document document = reader.read("src/book.xml");
// 3.獲得根元素
element rootelement = document.getrootelement();
// 4.獲得書節點
element bookelement = rootelement.element("書"); // 獲得第一個指定名稱的子節點
// 5.獲得書名節點
element booknameelement = bookelement.element("書名");
// 6.輸出元素的内容
string text = booknameelement.gettext();
system.out.println(text);
}
// 查找第二本書作者節點的name屬性
public void findattribute() throws exception {
// 獲得document
document document = dom4jutils.getdocument();
// 獲得第二本書的作者節點
// 根元素
// 獲得第二本書
list<element> elements = rootelement.elements("書");
element bookelement = elements.get(1);
// 獲得作者
element authorelement = bookelement.element("作者");
string value = authorelement.attributevalue("name");
system.out.println(value);
// 增加一個節點, 第二本書增加一個售價
public void add() throws exception {
// 獲得根元素
element bookelement = (element) rootelement.elements("書").get(1);
/* 傳統方式
// 建立一個售價節點
element priceelement = documenthelper.createelement("售價");
// 添加内容
priceelement.settext("108元");
// 加到書節點下面
bookelement.add(priceelement);*/
// addelement方法建立了新元素,添加到目前元素下面,傳回了新建立的元素
bookelement.addelement("售價").settext("108元");
// 寫入xml
dom4jutils.write2xml(document);
//增加一個屬性
public void addattribute() throws exception {
// 獲得第一個作者
element author = rootelement.element("書").element("作者");
// 增加一個屬性
author.addattribute("name", "zxx");
// 寫入檔案
//删除一個節點
public void remove() throws exception {
// 獲得第二本書的第二個售價節點
element priceelement = (element) ((element) rootelement.elements("書").get(1)).elements("售價").get(1);
// 獲得它的父節點删除自身
priceelement.getparent().remove(priceelement);
dom4jutils.java檔案:
import java.io.filenotfoundexception;
import java.io.unsupportedencodingexception;
public class dom4jutils {
// 獲得document對象
public static document getdocument() throws documentexception {
return reader.read("src/book.xml");
public static void write2xml(document document) throws exception {
// filewriter流預設是用gb2312編碼
//filewriter out = new filewriter("src/book.xml");
/* 快捷的輸出方式
writer out = new outputstreamwriter(new fileoutputstream("src/book.xml"), "utf-8");
document.write(out);
out.close();*/
// 帶格式化的輸出方式
outputformat format = outputformat.createprettyprint();
format.setencoding("utf-8");
/*writer out = new outputstreamwriter(new fileoutputstream("src/book.xml"), "utf-8");
xmlwriter writer = new xmlwriter(out, format);*/
xmlwriter writer = new xmlwriter(new fileoutputstream("src/book.xml"), format);
writer.write(document);
writer.close();