dom4j解析XML之【增刪改查】

一、待解析的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>



發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章