本篇博客继续讨论xml解析相关的技术——DOM4J。
Dom4j是一个简单、灵活的开放源代码的库。
基本概念与DOM相似(及Document,Attribute等),但是在API命名上做了更直观的优化。
使用DOM4J开发,需要下载DOM4J相应的jar包。
下面详细介绍DOM4J的常用方法,以及CRUD的相关JUnit代码展示。
1.获取Document对象的方法
2.Element操作常用方法
3.Attibute操作常用方法
4.Text操作常用方法
5.将Document存入xml文件中常用方法
6.字符串与XML对象相互转换常用方法
7.JUnit代码展示如下:
先贴出要解析的xml文件内容,与DOM解析所用xml文件一样。
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<users>
<user id="001">
<name>张三</name>
<password>abc</password>
</user>
<user id="002">
<name>李四</name>
<password>2</password>
</user>
<user id="003">
<name>王五</name>
<password>3</password>
</user>
<user id="004">
<name>王麻子</name>
<password>5</password>
</user>
<user id="005">
<name>Dean</name>
<password>5</password>
</user>
</users>
</pre><span style="white-space:pre"></span><p>代码如下:</p><p><span style="text-indent:-0.38in"><span style="font-size:14px"><span style="font-family:宋体"></span></span></span></p><pre name="code" class="java">package neuq.test.dom4j;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.FileWriter;
import java.io.IOException;
import java.io.OutputStream;
import java.io.UnsupportedEncodingException;
import java.util.List;
import org.dom4j.Document;
import org.dom4j.DocumentException;
import org.dom4j.Element;
import org.dom4j.io.OutputFormat;
import org.dom4j.io.SAXReader;
import org.dom4j.io.XMLWriter;
import org.junit.Test;
/*
* 测试通过DOM4J对xml文件CRUD
*
* R:查看名称为李四的用户的密码
* U:将张三的密码改为1
* C:添加一个用户name=Sam,id=006,password=6
* D:将Dean用户的信息删除
*
* @author:Dean
* @date:2014-6-24
*
*/
public class DOM4JTest {
private File f=new File("D:\\Workspaces\\For Java SE\\Test\\src\\neuq\\test\\dom4j\\users.xml");
//R:查看名称为李四的用户的密码,和id值
@Test
public void testReadByDom4J() throws Exception{
//获取读取器
SAXReader reader=new SAXReader();
//读取XML文件,获取document对象
Document document=reader.read(f);
//得到根标签
Element rootEle=document.getRootElement();
//根据根标签拿到子标签的集合
List<Element> elements=rootEle.elements("user");
//遍历子标签的集合
for(Element element:elements){
//获取name子标签
Element nameEle=element.element("name");
//判断,name是否为李四
if("李四".equals(nameEle.getText())){
//是 获取password子标签,并打印text内容,和父标签的id属性
Element passwordEle=element.element("password");
System.out.println(nameEle.getText()+" "+passwordEle.getText()+" "+element.attributeValue("id"));
return;
}
}
//没有找到相应用户
System.out.println("没有找到对应用户!");
}
// U:将张三的密码改为<![CDATA[]]>
@Test
public void testUpdateByDom4J() throws Exception{
//获取读取器
SAXReader reader=new SAXReader();
//读取xml文件,获取document对象
Document document=reader.read(f);
//拿到users根标签
Element rootEle=document.getRootElement();
//拿到user子标签集合
List<Element> elements=rootEle.elements("user");
//遍历集合
for(Element element:elements){
//获取name子标签
Element nameEle=element.element("name");
//判断name子标签text是否为张三
if("张三".equals(nameEle.getText())){
//是 获取password子标签
Element passwordEle=element.element("password");
//修改password内容
passwordEle.setText("1");
//保存document到xml文件中去
//文档中含有中文,设置OutputFormat,并关联输出流
OutputFormat outputFormat=OutputFormat.createPrettyPrint();
outputFormat.setEncoding("UTF-8");
FileWriter out=new FileWriter(f);
//创建XMLWriter,写入即可,这与SAXReader是互逆的
XMLWriter xmlWriter=new XMLWriter(out, outputFormat);
xmlWriter.write(document);
xmlWriter.close();
//提示修改成功并返回
System.out.println("修改成功!!");
return;
}
}
//没有找打对应用户
System.out.println("没有找到对应的用户");
}
//C:添加一个用户name=Sam,id=006,password=6
@Test
public void testCreateByDom4J() throws Exception{
//获取读取器
SAXReader reader=new SAXReader();
//读取xml文件获取document对象
Document document=reader.read(f);
//获取根标签
Element rootEle=document.getRootElement();
//为根标签添加user子标签;
Element userEle=rootEle.addElement("user");
//为user子标签添加属性和子标签
userEle.addAttribute("id", "006");
Element nameEle=userEle.addElement("name");
//为子标签设置text的值
nameEle.setText("Sam");
Element passwordEle=userEle.addElement("password");
//为子标签设置text的值
passwordEle.setText("6");
//保存
OutputFormat format=OutputFormat.createPrettyPrint();
format.setEncoding("UTF-8");
OutputStream outputStream=new FileOutputStream(f);
XMLWriter writer=new XMLWriter(outputStream, format);
writer.write(document);
writer.close();
//提示保存成功
System.out.println("保存成功!!!");
}
//D:将Dean用户的信息删除
@Test
public void testDeleteByDom4J() throws Exception{
//获取读取器
SAXReader reader=new SAXReader();
//读取xml文件获取document对象
Document document=reader.read(f);
//拿到users根标签
Element rootEle=document.getRootElement();
//拿到user子标签的List集合
List<Element> elements=rootEle.elements();
//遍历集合
for(Element userEle:elements){
//获取nameEle子标签
Element nameEle=userEle.element("name");
//判断 nameEle的text是否为Dean
if("Dean".equals(nameEle.getText())){
//是 删除Dean的所有信息
userEle.getParent().remove(userEle);
//保存
OutputFormat format=OutputFormat.createPrettyPrint();
format.setEncoding("UTF-8");
OutputStream outputStream=new FileOutputStream(f);
XMLWriter writer=new XMLWriter(outputStream, format);
writer.write(document);
writer.close();
//提示成功并返回
System.out.println("删除成功");
return;
}
}
//没有找到响应用户
System.out.println("没有找到对应用户!");
}