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