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>



你可能感兴趣的:(java,xml,解析,dom4j)