一、待解析的XML
<span style="font-size:14px;"><?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE 書架 SYSTEM "book.dtd">
<書架>
<書>
<書名>Java就業培訓教程123</書名>
<特價>9.99</特價>
<作者>小張</作者>
<售價>39.00元</售價>
</書>
<書>
<書名>JavaScript網頁開發</書名>
<作者>小祥</作者>
<售價>11</售價>
</書>
</書架></span>
二、解析程序
本人使用 dom4j-1.6.1.jar 配合單元測試進行解析測試
<span style="font-size:14px;">package com.teng.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;
public class Demo2 {
//查詢
@Test
public void find() throws Exception{
//1、創建解析器
SAXReader reader = new SAXReader();
//2、讀取文檔
Document doc = reader.read("book.xml");
//3、獲取文檔的根節點
Element root = doc.getRootElement();
//4、獲取第一個書名節點的值
String name = root.element("書").element("書名").getText();
//System.out.println(name);
//5、遍歷所有的<書>節點的<書名>節點
List<Element> eleList = root.elements("書");
for(Element ele : eleList){
String names = ele.element("書名").getText();
System.out.println(names);
}
}
//增加
@Test
public void add() throws Exception{
//1、創建解析器
SAXReader reader = new SAXReader();
//2、讀取文檔
Document doc = reader.read("book.xml");
//3、獲取文檔的根節點
Element root = doc.getRootElement();
//4、創建一個新節點
Element newEle = DocumentHelper.createElement("特價");
newEle.setText("9.99");
//5、將新節點,添加到相應父節點下
root.element("書").add(newEle);
//6、更新XML文件
//方式一:利用Node接口提供的write方法
/*Writer writer = new OutputStreamWriter(new FileOutputStream("book.xml"),"gb2312");
doc.write(writer);
writer.close();*/
//方式二:XMLWriter進行輸出
OutputFormat format = OutputFormat.createCompactFormat();//輸出化格式器
format.setEncoding("utf-8");
XMLWriter writer =new XMLWriter(new FileOutputStream("book.xml"),format);
writer.write(doc);
writer.close();
}
//在指定位置添加節點
@Test
public void add2() throws Exception{
//1、創建解析器
SAXReader reader = new SAXReader();
//2、讀取文檔
Document doc = reader.read("book.xml");
//3、獲取文檔的根節點
Element root = doc.getRootElement();
//4、創建一個新節點
Element newEle = DocumentHelper.createElement("特價");
newEle.setText("9.99");
//獲取節點的List集合,並在第2個位置添加
List eles = root.element("書").elements();//獲取<書>節點下的List集合
eles.add(1, newEle);
//XMLWriter進行輸出
OutputFormat format = OutputFormat.createCompactFormat();//輸出化格式器
format.setEncoding("utf-8");
XMLWriter writer =new XMLWriter(new FileOutputStream("book.xml"),format);
writer.write(doc);
writer.close();
}
//更新
@Test
public void update() throws Exception{
//1、創建解析器
SAXReader reader = new SAXReader();
//2、讀取文檔
Document doc = reader.read("book.xml");
//3、獲取文檔的根節點
Element root = doc.getRootElement();
//4、獲取特價節點
Element priceEle = root.element("書").element("特價");
priceEle.setText("7.7元");
//XMLWriter進行輸出
OutputFormat format = OutputFormat.createCompactFormat();//輸出化格式器
format.setEncoding("utf-8");
XMLWriter writer =new XMLWriter(new FileOutputStream("book.xml"),format);
writer.write(doc);
writer.close();
}
//刪除
@Test
public void delete() throws Exception{
//1、創建解析器
SAXReader reader = new SAXReader();
//2、讀取文檔
Document doc = reader.read("book.xml");
//3、獲取文檔的根節點
Element root = doc.getRootElement();
//選取要刪除的節點
Element priceEle = root.element("書").element("特價");
//獲取該節點的父節點,並調用其remove()方法
priceEle.getParent().remove(priceEle);
//XMLWriter進行輸出
OutputFormat format = OutputFormat.createCompactFormat();//輸出化格式器
format.setEncoding("utf-8");
XMLWriter writer =new XMLWriter(new FileOutputStream("book.xml"),format);
writer.write(doc);
writer.close();
}
}</span>