一、简介

1.网上下载DOM4J 1.6.1压缩包,解压开之后,发现几个目录和一个jar文件,jar文件是必须的文件其它目录:

docs目录:帮助文档的目录,单击index.html:

Quick start是快速入门超链接,主要参考这里的代码完成对dom4j的认识,并完成CRUD的操作。

Javdoc(1.6.1)是dom4j的帮助文档,需要查找相关信息的时候主要参考这里。

lib目录:该目录下有相关若干jar包,他们是dom4j-1.6.1.jar的依赖文件,当使用XPath解析XML文档提示错误信息的时候,应当将该文件夹下面的相关jar文件加入路径。

src目录:该目录存放源文件,可以压缩该目录以便于查找源代码。

2.使用dom4j的好处。

最大的好处就是能够大大简化对XML文档的操作。

但应当注意,导包的时候应当导入的包是dom4j的包,而不是原来的包了,比如:Document对象应当导入的包名为:org.dom4j.Document。

3.准备工作:对项目名称右键单击,新建目录lib,对着该目录右键单击,新建目录dom4j,将相关的jar文件复制到该目录中,选中所有的jar文件,右键build path->addtobuildpath,效果图:

另外Books类

 package p00.domain;

 public class Book {
public String title;
public double price;
public String id;
public String getId()
{
return id;
}
public void setId(String id)
{
this.id=id;
}
public String getTitle()
{
return title;
}
public double getPrice()
{
return price;
}
public void setTitle(String title)
{
this.title=title;
}
public void setPrice(double price)
{
this.price=price;
}
public String toString()
{
return "图书ISBN为:"+id+" 书名为:"+title+" 价格为:"+price;
} }

books.xml文档:

 <?xml version="1.0" encoding="UTF-8"?>
<books>
<book id="book1">
<title>JAVA编程思想</title>
<price>80.00</price>
</book>
<book id="book2">
<title>JAVA核心技术</title>
<price>100.00</price>
</book>
</books>

持久化保存到xml文档的方法。

使用第一种方法:

 private static void writeToNewXMLDocument(Document document) throws Exception {
FileWriter fw=new FileWriter("xmldata/newbooks.xml");
OutputFormat of=OutputFormat.createPrettyPrint();
of.setEncoding("gbk");//如果改为utf-8则出现乱码。
XMLWriter writer=new XMLWriter(fw,of);
writer.write(document);
writer.close();//注意不要忘记关流。
}

使用该方法出现了中文乱码问题,原因是文件编码为gbk,二文件内容编码为utf-8,产生原因不明。因此改用另外一种方法,该方法使用OutputStreamWriter类实现特定编码方式的写入,解决了中文乱码问题

   /**
* 通过document对象将内存中的dom树保存到新的xml文档,使用特定的编码方式:utf-8。
* @param document
* @throws Exception
*/
private static void writeToNewXMLDocument(Document document) throws Exception {
FileOutputStream fos=new FileOutputStream(new File("xmldata/newbooks.xml"));
OutputStreamWriter osw=new OutputStreamWriter(fos,"utf-8");
/**
*使用这种写法才不会产生乱码
*/
XMLWriter writer=new XMLWriter(osw);
writer.write(document);
writer.close();
}

二、CRUD操作。

1、读取(R)

 private static List<Book> readAllElementsFromXMLDocument(Document document) {
List<Book>books=new ArrayList<Book>();
Element root=document.getRootElement();
List list=root.elements();
for(int i=0;i<list.size();i++)
{
Element book=(Element) list.get(i);
Book b=new Book();
String id=book.attributeValue("id");
List ll=book.elements();
b.setId(id);
System.out.println(id);
for(int j=0;j<ll.size();j++)
{
Element element=(Element) ll.get(j);
if("title".equals(element.getName()))
{
String title=element.getText();
b.setTitle(title);
System.out.println(title);
}
if("price".equals(element.getName()))
{
String price=element.getText();
double p=Double.parseDouble(price);
b.setPrice(p);
System.out.println(price);
}
}
books.add(b);
}
return books;
}

效果图:

2、修改(U)

     /**
* 该方法的作用是修改document中的内容
* 将id为b002的元素的title改为Java Core,Price改为100.01
* @param document
*/
private static void ModifyInformationOfXMLDocument(Document document) {
Element root=document.getRootElement();
List books=root.elements();
for(int i=0;i<books.size();i++)
{ Element book=(Element) books.get(i);
if("book2".equals(book.attributeValue("id")))
{
for(Iterator it=book.elementIterator();it.hasNext();)
{
Element node=(Element) it.next();
String type=node.getName();
if("title".equals(type))
{
node.setText("JAVA Core");
}
if("price".equals(type))
{
node.setText("100.01");
}
}
}
}
}

效果图:

<?xml version="1.0" encoding="UTF-8"?>
<books>
<book id="book1">
<title>JAVA编程思想</title>
<price>80.00</price>
</book>
<book id="book2">
<title>JAVA Core</title>
<price>100.01</price>
</book>
</books>

3、删除(D)

 /**
* 该方法实现了使用dom4j的删除元素的功能
* @param document
*/
private static void deleteInformationOfXMLDocument(Document document) {
Element root=document.getRootElement();
for(Iterator it=root.elementIterator();it.hasNext();)
{
Element book=(Element) it.next();
String id=book.attributeValue("id");
if("book1".equals(id))
{
Element parent=book.getParent();
parent.remove(book);
}
}
}

效果图:

<?xml version="1.0" encoding="UTF-8"?>
<books> <book id="book2">
<title>JAVA核心技术</title>
<price>100.00</price>
</book>
</books>

4、添加(C)

  /**
* 实现了添加新节点:book的功能
* @param document
*/
private static void addNewBookToXMLDocument(Document document) {
Element root=document.getRootElement();
Element newBook=root.addElement("book");
newBook.addAttribute("id", "book3");
Element title=newBook.addElement("title");
title.setText("凤姐玉照");
Element price=newBook.addElement("price");
price.setText("10000.01");
}

效果图:

<?xml version="1.0" encoding="UTF-8"?>
<books>
<book id="book1">
<title>JAVA编程思想</title>
<price>80.00</price>
</book>
<book id="book2">
<title>JAVA核心技术</title>
<price>100.00</price>
</book>
<book id="book3"><title>凤姐玉照</title><price>10000.01</price></book></books>

5.完整代码

 package p03.CRUDToXMLDocumentByDom4j;

 import java.io.File;
import java.io.FileOutputStream;
import java.io.FileWriter;
import java.io.OutputStreamWriter;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List; import org.dom4j.Document;
import org.dom4j.Element;
import org.dom4j.io.OutputFormat;
import org.dom4j.io.SAXReader;
import org.dom4j.io.XMLWriter; import p00.domain.Book; /**
* 该类通过dom4j技术实现了对xml文档的增删改查。
* @author kdyzm
*
*/
public class SetAllElementsByDom4j {
public static void main(String args[]) throws Exception
{
/**
* 第一步,得到document对象。
*/
Document document=getDocument(); /**
* 第二步,修改得到的document对象
*/ /**
* 首先,读取功能
*/
// List<Book>books=readAllElementsFromXMLDocument(document);
// traverseBooks(books); /**
* 其次,修改功能
* 修改内容:将id为b002的元素的title改为Java Core,Price改为100.01
*/
// ModifyInformationOfXMLDocument(document); /**
* 再者:实现删除功能
* 删除内容:删除掉id为book1的元素内容。
*/
// deleteInformationOfXMLDocument(document); /**
* 最后:实现添加i新元素功能
* 添加内容:id为book3,title内容为:凤姐玉照,price内容为10000.00
*/
// addNewBookToXMLDocument(document); /**
* 第三步:将得到的document对象持久化保存到硬盘(XML)
*/
writeToNewXMLDocument(document);
}
/**
* 实现了添加新节点:book的功能
* @param document
*/
private static void addNewBookToXMLDocument(Document document) {
Element root=document.getRootElement();
Element newBook=root.addElement("book");
newBook.addAttribute("id", "book3");
Element title=newBook.addElement("title");
title.setText("凤姐玉照");
Element price=newBook.addElement("price");
price.setText("10000.01");
} /**
* 该方法实现了使用dom4j的删除元素的功能
* @param document
*/
private static void deleteInformationOfXMLDocument(Document document) {
Element root=document.getRootElement();
for(Iterator it=root.elementIterator();it.hasNext();)
{
Element book=(Element) it.next();
String id=book.attributeValue("id");
if("book1".equals(id))
{
Element parent=book.getParent();
parent.remove(book);
}
}
} /**
* 该方法的作用是修改document中的内容
* 将id为b002的元素的title改为Java Core,Price改为100.01
* @param document
*/
private static void ModifyInformationOfXMLDocument(Document document) {
Element root=document.getRootElement();
List books=root.elements();
for(int i=0;i<books.size();i++)
{ Element book=(Element) books.get(i);
if("book2".equals(book.attributeValue("id")))
{
for(Iterator it=book.elementIterator();it.hasNext();)
{
Element node=(Element) it.next();
String type=node.getName();
if("title".equals(type))
{
node.setText("JAVA Core");
}
if("price".equals(type))
{
node.setText("100.01");
}
}
}
}
}
/**
* 遍历集合
* @param books
*/
private static void traverseBooks(List<Book> books) {
for(Iterator<Book>iterator=books.iterator();iterator.hasNext();)
{
Book book=iterator.next();
System.out.println(book);
}
}
/**
* 该方法实现了对xml文档的读取功能
* @param document
* @return
*/
private static List<Book> readAllElementsFromXMLDocument(Document document) {
List<Book>books=new ArrayList<Book>();
Element root=document.getRootElement();
List list=root.elements();
for(int i=0;i<list.size();i++)
{
Element book=(Element) list.get(i);
Book b=new Book();
String id=book.attributeValue("id");
List ll=book.elements();
b.setId(id);
System.out.println(id);
for(int j=0;j<ll.size();j++)
{
Element element=(Element) ll.get(j);
if("title".equals(element.getName()))
{
String title=element.getText();
b.setTitle(title);
System.out.println(title);
}
if("price".equals(element.getName()))
{
String price=element.getText();
double p=Double.parseDouble(price);
b.setPrice(p);
System.out.println(price);
}
}
books.add(b);
}
return books;
}
/**
* 通过document对象将内存中的dom树保存到新的xml文档,使用特定的编码方式:utf-8。
* @param document
* @throws Exception
*/
private static void writeToNewXMLDocument(Document document) throws Exception {
FileOutputStream fos=new FileOutputStream(new File("xmldata/newbooks.xml"));
OutputStreamWriter osw=new OutputStreamWriter(fos,"utf-8");
/**
*使用这种写法才不会产生乱码
*/
XMLWriter writer=new XMLWriter(osw);
writer.write(document);
writer.close();
} /**
* 该方法用于得到document对象。
* @return
* @throws Exception
*/
private static Document getDocument() throws Exception {
SAXReader sr=new SAXReader();
Document document=sr.read("xmldata/books.xml");
return document;
}
}

三、总结

使用dom4j大大减少了代码量,提供了编码效率,推荐使用该方法对XML文档进行解析。

四、使用XPath精确查找制定元素,优化dom4j的解析过程,减少代码量。

【JAVA与DOM4J实现对XML文档的CRUD操作】的更多相关文章

  1. jaxp实现对xml文档的增,删,改,查操作(附源码)浅析

    jaxp,属于javase中的一部分.是对xml进行解析的一个工具类: 既然说到这里,还是讲全一点,讲讲上面说到的xml的解析技术. xml的一个标记型文档. 在html的层级结构中,它会在内存中分配 ...

  2. XMLHelper类 源码(XML文档帮助类,静态方法,实现对XML文档的创建,及节点和属性的增、删、改、查)

    以下是代码: using System; using System.Collections.Generic; using System.Linq; using System.Web; using Sy ...

  3. 编写Java程序,使用 dom4j 创建一个 XML 文档,文档名为“city.xml”。注意该文档的格式和数据

    查看本章节 查看作业目录 需求说明: 使用 dom4j 创建一个 XML 文档,文档名为"city.xml".该文档的格式和数据如图所示 实现思路: 创建Java项目,添加dom4 ...

  4. 编写Java程序,现要求使用 dom4j 解析 city.xml 文档,实现省份及对应城市的联动特效,效果如图所示

    查看本章节 查看作业目录 需求说明: 现要求使用 dom4j 解析 city.xml 文档,实现省份及对应城市的联动特效,效果如图所示 实现思路: 创建解析 XML 文档类 ParseXML 和窗体类 ...

  5. 使用DOM进行xml文档的crud(增删改查)操作<操作详解>

    很多朋友对DOM有感冒,这里我花了一些时间写了一个小小的教程,这个能看懂,会操作了,我相信基于DOM的其它API(如JDOM,DOM4J等)一般不会有什么问题. 后附java代码,也可以下载(可点击这 ...

  6. 使用dom4j技术对xml文档进行增删改练习(一)

    整个流程如下面代码所以,并对一些重要代码意义做出详细解释: import java.io.File; import java.io.FileOutputStream; import org.dom4j ...

  7. javaweb学习总结十三(dom4j方式对XML文档进行解析以及Xpath的使用)

    一:dom4j方式介绍 对于xml的解析总共有三种 1:jaxp方式,是sun公司开发的,分为sax方式和dom方式 2:jdom方式,后来其中部分人员参与开发dom4j 3:dom4j方式,是现在企 ...

  8. 2.Java实现基于SOAP的XML文档网络传输及远程过程调用(RPC)-

    转自:https://blog.csdn.net/a214919447/article/details/55260411 SOAP(Simple Object Access Protocol,简单对象 ...

  9. 编写Java程序,创建一个 XML 文档,文档名为“hero.xml”,用于保存“王者荣耀”的英雄信息。

    查看本章节 查看作业目录 需求说明: 创建一个 XML 文档,文档名为"hero.xml",用于保存"王者荣耀"的英雄信息.英雄信息包括编号(id).姓名(na ...

随机推荐

  1. HTTP协议概念篇

    1.概念 协议是指计算机通信网络中两台计算机之间进行通信所必须共同遵守的规定或规则,超文本传输协议(HTTP)是一种通信协议,它允许将超文本标记语言(HTML)文档从Web服务器传送到客户端的浏览器. ...

  2. java去除字符串中的空格、回车、换行符、制表符

    import java.util.regex.Matcher; import java.util.regex.Pattern; /** * @author chzeze * 2016-11-07 */ ...

  3. 3分钟,9个Q&A让你快速知道Docker到底是什么

    不论是Google.Amazon.Microsoft.VMware都纷纷拥戴,加入Docker和Container所掀起的新时代云端虚拟化行列,这两项技术成为了IT界的新趋势.Docker和Conta ...

  4. C# 毕业证书打印《五》

    对鼠标操作Label的方法 #region //定义一个枚举类型,描述光标状态 private enum EnumMousePointPosition { #region MouseSizeNone ...

  5. [转]JVM内存堆布局图解分析

    JAVA能够实现跨平台的一个根本原因,是定义了class文件的格式标准,凡是实现该标准的JVM都能够加载并解释该class文件,据此也可以知道,为啥Java语言的执行速度比C/C++语言执行的速度要慢 ...

  6. 解读Unity中的CG编写Shader系列十 (光滑的镜面反射(冯氏着色))

    前文完成了最基本的镜面反射着色器,单平行光源下的逐顶点着色(per-vertex lighting),又称为古罗着色(Gouraud shading).这篇文章作为后续讨论更光滑的镜面反射方式,逐像素 ...

  7. Android 的 AlarmManager 和 wakeLock联合使用

    http://stackoverflow.com/questions/6864712/android-alarmmanager-not-waking-phone-up 主要说的是,对于android ...

  8. ThinkPHP增加数据库字段后插入数据为空的解决办法

    今天用ThinkPHP做了一个简单的商品发布系统,数据库本来只有四个字段id,name,url,image.id是主键,name是商品名称,url是商品链接,image是商品图片,做的差不多了,发现还 ...

  9. MPlayer-2016-bin-noConsole

    运行 Install-RMenu.cmd 添加右键播放功能 ; 往前0.05秒 大概10多个帧 ' 往后0.05秒 大概10多个帧 鼠标右键 快速定位 鼠标中键 退出 F1 缩小 F2 原始大小 F3 ...

  10. Hadoop 分布式文件系统:架构和设计

    引言 Hadoop分布式文件系统(HDFS)被设计成适合运行在通用硬件(commodity hardware)上的分布式文件系统.它和现有的分布式文件系统有很多共同点.但同时,它和其他的分布式文件系统 ...