使用Dom4j解析XML文件

写在前面的话

由于论文实验要求,需要实现操作XML文档,为此想到了dom4j这个工具,使用之后深感受益。在此分享给大家,以此共勉。

注:本文转载自http://blog.csdn.net/redarmy_chen/article/details/12969219  转载请注明转载地址,谢谢。

正文

dom4j是一个Java的XML API,类似于jdom,用来读写XML文件的。dom4j是一个非常非常优秀的Java XML API,具有性能优异、功能强大和极端易用使用的特点,同时它也是一个开放源代码的软件,可以在SourceForge上找到它。

对主流的Java XML API进行的性能、功能和易用性的评测,dom4j无论在那个方面都是非常出色的。如今你可以看到越来越多的Java软件都在使用dom4j来读写XML,例如Hibernate,包括sun公司自己的JAXM也用了Dom4j。

使用Dom4j开发,需下载dom4j相应的jar文件

1.官网下载: http://www.dom4j.org/dom4j-1.6.1/

2.dom4j是sourceforge.net上的一个开源项目,因此可以到http://sourceforge.net/projects/dom4j下载其最新版。

对于下载的zip文件进行解压后的效果如下:

打开dom4j-1.6.1的解压文件

在这里可以看到有docs帮助的文件夹,也有需要使用dom4j解析xml文件的dom4j-1.6.1.jar文件.我们只需要把dom4j-1.6.1.jar文件构建到我们开发的项目中就可以使用dom4j开发了.

下面我以Myeclipse创建Java项目的构建方法为例说明.

首先创建一个demo项目,在demo项目中创建一个lib文件,把dom4j-1.6.1.jar文件拷贝到lib中,然后右键dom4j-1.6.1jar文件

点击Add to Build Path即可构建到项目中去了.

备注:如果进行的是web项目开发,我们只需要把它拷贝到web-inf/lib中去即可,会自动构建到web项目中.

在项目开发的过程中可以参考docs文件夹的(帮助文档),找到index.html打开,点击Quick start可以通过帮助文档进行学习 dom4j进行xml的解析.

下面我对我认为api中重要的方法进行翻译说明如下:

一、DOM4j中,获得Document对象的方式有三种

1.读取XML文件,获得document对象

SAXReader reader = new SAXReader();
        Document   document = reader.read(new File("csdn.xml"));

2.解析XML形式的文本,得到document对象.

String text = "<csdn></csdn>";
        Document document = DocumentHelper.parseText(text);

3.主动创建document对象.

Document document = DocumentHelper.createDocument();
         //创建根节点

Element root = document.addElement("csdn");

二、节点对象操作的方法

1.获取文档的根节点.

Element root = document.getRootElement();

2.取得某个节点的子节点.

Element element=node.element(“四大名著");

3.取得节点的文字

String text=node.getText();

4.取得某节点下所有名为“csdn”的子节点,并进行遍历.

List nodes = rootElm.elements("csdn");
          for (Iterator it = nodes.iterator(); it.hasNext();) {
             Element elm = (Element) it.next();
            // do something

}

5.对某节点下的所有子节点进行遍历.

for(Iterator it=root.elementIterator();it.hasNext();){
    Element element = (Element) it.next();
        // do something
 }

6.在某节点下添加子节点

Element elm = newElm.addElement("朝代");

7.设置节点文字.

elm.setText("明朝");

8.删除某节点.

//childElement是待删除的节点,parentElement是其父节点  

parentElement.remove(childElment);

9.添加一个CDATA节点.

Element contentElm = infoElm.addElement("content");
contentElm.addCDATA(“cdata区域”);

三、节点对象的属性方法操作

1.取得某节点下的某属性

Element root=document.getRootElement();    
    //属性名name

Attribute attribute=root.attribute("id");

2.取得属性的文字

String text=attribute.getText();

3.删除某属性

Attribute attribute=root.attribute("size");
 root.remove(attribute);

4.遍历某节点的所有属性

Element root=document.getRootElement();    

for(Iterator it=root.attributeIterator();it.hasNext();){

Attribute attribute = (Attribute) it.next();

String text=attribute.getText();

System.out.println(text);
    }

5.设置某节点的属性和文字.

newMemberElm.addAttribute("name", "sitinspring");

6.设置属性的文字

Attribute attribute=root.attribute("name");
   attribute.setText("csdn");

四、将文档写入XML文件

1.文档中全为英文,不设置编码,直接写入的形式.

XMLWriter writer = new XMLWriter(new FileWriter("ot.xml"));

writer.write(document);

writer.close();

2.文档中含有中文,设置编码格式写入的形式.

OutputFormat format = OutputFormat.createPrettyPrint();
// 创建文件输出的时候,自动缩进的格式

format.setEncoding("UTF-8");//设置编码

XMLWriter writer = new XMLWriter(newFileWriter("output.xml"),format);

writer.write(document);       
writer.close();

五、字符串与XML的转换

1.将字符串转化为XML

String text = "<csdn> <java>Java班</java></csdn>";

Document document = DocumentHelper.parseText(text);

2.将文档或节点的XML转化为字符串.

SAXReader reader = new SAXReader();
Document document = reader.read(new File("csdn.xml"));

Element root=document.getRootElement();

String docXmlText=document.asXML();

String rootXmlText=root.asXML();
Element memberElm=root.element("csdn");   
String memberXmlText=memberElm.asXML();

六、案例(解析sida.xml文件并对其进行curd的操作)

1.sida.xml描述四大名著的操作

文件内容如下

<?xml version="1.0" encoding="UTF-8"?>

<四大名著>

<西游记 id="x001">

<作者>吴承恩1</作者>

<作者>吴承恩2</作者>

<朝代>明朝</朝代>

</西游记>

<红楼梦 id="x002">

<作者>曹雪芹</作者>

</红楼梦>

</四大名著>

2.解析类测试操作

package dom4j;
import java.io.File;
import java.io.FileOutputStream;
import java.io.FileWriter;
import java.io.OutputStreamWriter;
import java.nio.charset.Charset;
import java.nio.charset.CharsetEncoder;
import java.util.Iterator;
import java.util.List;
import org.dom4j.Attribute;
import org.dom4j.Document;
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 Demo01 {
@Test
public void test() throws Exception {
// 创建saxReader对象
SAXReader reader = new SAXReader();
// 通过read方法读取一个文件 转换成Document对象
Document document = reader.read(new File("src/dom4j/sida.xml"));
//获取根节点元素对象
Element node = document.getRootElement();
//遍历所有的元素节点
listNodes(node);
// 获取四大名著元素节点中,子节点名称为红楼梦元素节点。
Element element = node.element("红楼梦");
//获取element的id属性节点对象
Attribute attr = element.attribute("id");
//删除属性
element.remove(attr);
//添加新的属性
element.addAttribute("name", "作者");
// 在红楼梦元素节点中添加朝代元素的节点
Element newElement = element.addElement("朝代");
newElement.setText("清朝");
//获取element中的作者元素节点对象
Element author = element.element("作者");
//删除元素节点
boolean flag = element.remove(author);
//返回true代码删除成功,否则失败
System.out.println(flag);
//添加CDATA区域
element.addCDATA("红楼梦,是一部爱情小说.");
// 写入到一个新的文件中
writer(document);
}
/**
 * 把document对象写入新的文件
 *
 * @param document
 * @throws Exception
 */
public void writer(Document document) throws Exception {
// 紧凑的格式
// OutputFormat format = OutputFormat.createCompactFormat();
// 排版缩进的格式
OutputFormat format = OutputFormat.createPrettyPrint();
// 设置编码
format.setEncoding("UTF-8");
// 创建XMLWriter对象,指定了写出文件及编码格式
// XMLWriter writer = new XMLWriter(new FileWriter(new
// File("src//a.xml")),format);
XMLWriter writer = new XMLWriter(new OutputStreamWriter(
new FileOutputStream(new File("src//a.xml")), "UTF-8"), format);
// 写入
writer.write(document);
// 立即写入
writer.flush();
// 关闭操作
writer.close();
}
/**
 * 遍历当前节点元素下面的所有(元素的)子节点
 *
 * @param node
 */
public void listNodes(Element node) {
System.out.println("当前节点的名称::" + node.getName());
// 获取当前节点的所有属性节点
List<Attribute> list = node.attributes();
// 遍历属性节点
for (Attribute attr : list) {
System.out.println(attr.getText() + "-----" + attr.getName()
+ "---" + attr.getValue());
}
if (!(node.getTextTrim().equals(""))) {
System.out.println("文本内容::::" + node.getText());
}
// 当前节点下面子节点迭代器
Iterator<Element> it = node.elementIterator();
// 遍历
while (it.hasNext()) {
// 获取某个子节点对象
Element e = it.next();
// 对子节点进行遍历
listNodes(e);
}
}
/**
 * 介绍Element中的element方法和elements方法的使用
 *
 * @param node
 */
public void elementMethod(Element node) {
// 获取node节点中,子节点的元素名称为西游记的元素节点。
Element e = node.element("西游记");
// 获取西游记元素节点中,子节点为作者的元素节点(可以看到只能获取第一个作者元素节点)
Element author = e.element("作者");
System.out.println(e.getName() + "----" + author.getText());
// 获取西游记这个元素节点 中,所有子节点名称为作者元素的节点 。
List<Element> authors = e.elements("作者");
for (Element aut : authors) {
System.out.println(aut.getText());
}
// 获取西游记这个元素节点 所有元素的子节点。
List<Element> elements = e.elements();
for (Element el : elements) {
System.out.println(el.getText());
}
}
}

自己适当注释部分代码观察运行效果,反复练习,希望你对dom4j有进一步的了解.

七、字符串与XML互转换案例

package dom4j;
import java.io.File;
import java.io.FileOutputStream;
import java.io.OutputStreamWriter;
import org.dom4j.Document;
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 Demo02 {
@Test
public void test() throws Exception {
// 创建saxreader对象
SAXReader reader = new SAXReader();
// 读取一个文件,把这个文件转换成Document对象
Document document = reader.read(new File("src//c.xml"));
// 获取根元素
Element root = document.getRootElement();
// 把文档转换字符串
String docXmlText = document.asXML();
System.out.println(docXmlText);
System.out.println("---------------------------");
// csdn元素标签根转换的内容
String rootXmlText = root.asXML();
System.out.println(rootXmlText);
System.out.println("---------------------------");
// 获取java元素标签 内的内容
Element e = root.element("java");
System.out.println(e.asXML());
}
/**
 * 创建一个document对象 往document对象中添加节点元素 转存为xml文件
 *
 * @throws Exception
 */
public void test2() throws Exception {
Document document = DocumentHelper.createDocument();// 创建根节点
Element root = document.addElement("csdn");
Element java = root.addElement("java");
java.setText("java班");
Element ios = root.addElement("ios");
ios.setText("ios班");
writer(document);
}
/**
 * 把一个文本字符串转换Document对象
 *
 * @throws Exception
 */
public void test1() throws Exception {
String text = "<csdn><java>Java班</java><net>Net班</net></csdn>";
Document document = DocumentHelper.parseText(text);
Element e = document.getRootElement();
System.out.println(e.getName());
writer(document);
}
/**
 * 把document对象写入新的文件
 *
 * @param document
 * @throws Exception
 */
public void writer(Document document) throws Exception {
// 紧凑的格式
// OutputFormat format = OutputFormat.createCompactFormat();
// 排版缩进的格式
OutputFormat format = OutputFormat.createPrettyPrint();
// 设置编码
format.setEncoding("UTF-8");
// 创建XMLWriter对象,指定了写出文件及编码格式
// XMLWriter writer = new XMLWriter(new FileWriter(new
// File("src//a.xml")),format);
XMLWriter writer = new XMLWriter(new OutputStreamWriter(
new FileOutputStream(new File("src//c.xml")), "UTF-8"), format);
// 写入
writer.write(document);
// 立即写入
writer.flush();
// 关闭操作
writer.close();
}
}

美文美图



Java进阶(二十七)使用Dom4j解析XML文件的更多相关文章

  1. 在java项目中怎样利用Dom4j解析XML文件获取数据

    在曾经的学习.net时常常会遇到利用配置文件来解决项目中一些须要常常变换的数据.比方数据库的连接字符串儿等.这个时候在读取配置文件的时候.我们一般会用到一个雷configuration,通过这个类来进 ...

  2. 【JAVA使用XPath、DOM4J解析XML文件,实现对XML文件的CRUD操作】

    一.简介 1.使用XPath可以快速精确定位指定的节点,以实现对XML文件的CRUD操作. 2.去网上下载一个“XPath帮助文档”,以便于查看语法等详细信息,最好是那种有很多实例的那种. 3.学习X ...

  3. 【java项目实战】dom4j解析xml文件,连接Oracle数据库

    简单介绍 dom4j是由dom4j.org出品的一个开源XML解析包.这句话太官方.我们还是看一下官方给出的解释.例如以下图: dom4j是一个易于使用的.开源的,用于解析XML,XPath和XSLT ...

  4. Dom4j解析Xml文件,Dom4j创建Xml文件

    Dom4j解析Xml文件,Dom4j创建Xml文件 >>>>>>>>>>>>>>>>>>&g ...

  5. 用DOM4J解析XML文件案例

    用DOM4J解析XML文件案例,由于DOM4J不像JAXP属于JAVASE里,所以如果要使用DOM4J,则必须额外引入jar包,如图:

  6. 使用dom4j 解析xml文件

    //使用dom4j 解析xml文件,升级版,dom4j是对dom的封装 //重点 package com.offcn.utils; import java.io.File; import java.i ...

  7. dom4j 解析XML文件

    <?xml version="1.0" encoding="UTF-8"?> <!-- 手机的根节点 --> <Phones> ...

  8. 用dom4j解析xml文件并执行增删改查操作

    转自:https://www.aliyun.com/jiaocheng/1339446.html xml文件: <?xml version="1.0" encoding=&q ...

  9. 使用DOM4J解析XMl文件与读取XML文件

    XML文件 <?xml version="1.0" encoding="UTF-8"?> <bookstore> <book id ...

随机推荐

  1. 基本数据类型 异常 数组排序 JVM区域划分

               Day01 1.基本数据类型各占几个字节 Byte 1 short2 int4 long8 float4 double6 char2 boolean1 Byte b1=3,b2= ...

  2. Errors running builder 'DeploymentBuilder' on project '工程名'

    打开myEclipse就会报 Errors running builder 'DeploymentBuilder' on project '工程名' xxxNullpointException 的错误 ...

  3. About Windows 10 April 2018 Update

    在四月的最后一天,微软终于正式发布了 Windows 10 的又一次重大更新,并命名为 Windows 10 四月更新,轮压哨,我软确实谁也不服:再晚一天,我软改名部门恐怕又要发挥作用了,毕竟我软存在 ...

  4. android 自定义view之侧滑效果

    效果图: 看网上的都是两个view拼接,默认右侧的不显示,水平移动的时候把右侧的view显示出来.但是看最新版QQ上的效果不是这样的,但给人的感觉却很好,所以献丑来一发比较高仿的. 知识点: 1.Vi ...

  5. Android简易实战教程--第四十三话《上拉加载与下拉刷新》

    ListView的下拉刷新很常见,很多开源的框架都能做到这个效果,当然也可以自己去实现.本篇案例是基于xlistview的. 布局: <RelativeLayout xmlns:android= ...

  6. 学习TensorFlow,调用预训练好的网络(Alex, VGG, ResNet etc)

    视觉问题引入深度神经网络后,针对端对端的训练和预测网络,可以看是特征的表达和任务的决策问题(分类,回归等).当我们自己的训练数据量过小时,往往借助牛人已经预训练好的网络进行特征的提取,然后在后面加上自 ...

  7. 详解EBS接口开发之采购订单导入

    采购订单常用标准表简介 1.1   常用标准表 如下表中列出了与采购订单导入相关的表和说明: 表名 说明 其他信息 po.po_headers_all 采购订单头 采购订单号,采购类型,供应商,地点, ...

  8. J2EE规范标准

    J2EE是一个很大的平台体系,提供了很多服务.程序接口.协议等.这么庞大的体系必须要由一系列的标准进行规范,不然将会一片混乱.通过这些规范好的接口来开发程序将会使程序更加强壮.更加有生命力.总的来说, ...

  9. JQuery 网页选项卡制作

    网页选项卡可以较好的利用有限的页面来展示更多的元素,而使用JQuery来制作网页选项卡也是一件非常简单的事情.今天就来分享一个网页选项卡的制作小技巧. 引入所需库 选项卡原理 业务核心 完整小例子 引 ...

  10. SQL Server 执行计划操作符详解(2)——串联(Concatenation )

    本文接上文:SQL Server 执行计划操作符详解(1)--断言(Assert) 前言: 根据计划,本文开始讲述另外一个操作符串联(Concatenation),读者可以根据这个词(中英文均可)先幻 ...