DOM4J - 简介

是dom4j.org出品的一个开源XML解析包。Dom4j是一个易用的、开源的库,用于XML,XPath和XSLT。它应用于Java平台,采用了Java集合框架并完全支持DOM,SAX和JAXP。

DOM4J 使用起来非常简单。只要你了解基本的 XML-DOM 模型,就能使用。

Dom:把整个文档作为一个对象。

DOM4J 接口定义

它的主要接口都在org.dom4j里面定义

Attribute 定义了XML属性
Branch 只能够包含子节点的节点。如XML元素(Element)和文档(Document)定义了一个公共的行为
CDATA 定义了XML CDATA区域
CharacterData 是一个标识接口,标识基于字符的节点。如CDATA,Comment,Text
Comment 定义了XML注释的行为
Document 定义了XML文档
DocumentType 定义XML DOCTYPE声明
Element 定义XML元素
ElementHandler 定义了Element对象的处理器
ElementPath 被ElementHandler使用,用于取得当前正在处理的路径层次信息
Entity 定义了XML entity
Node 为dom4j中所有的XML节点定义了多态行为
NodeFilter 定义了在dom4j节点中产生的一个滤镜或谓词的行为(predicate)
ProcessingInstruction 定义XML处理指令
Text 定义XML文本节点
Visitor 用于实现Visitor模式
XPath 在分析一个字符串后会提供一个XPath表达式

接口之间的继承关系如下

● interface java.lang.Cloneable

● interface org.dom4j.Node

● interface org.dom4j.Attribute

● interface org.dom4j.

● interface org.dom4j.Document

● interface org.dom4j.Element

● interface org.dom4j.CharacterData

● interface org.dom4j.CDATA

● interface org.dom4j.Comment

● interface org.dom4j.Text

● interface org.dom4j.DocumentType

● interface org.dom4j.Entity

● interface org.dom4j.ProcessingInstruction

基本使用方式:

// 读取XML文件:创建ASXReader使用reader读取xml文件,获得Document对象:
SAXReader reader = new SAXReader();
Document document = reader.read("xml文件路径"); // 获取文档的根节点
Element root = document.getRootElement(); // 获取指定节点下的子节点
Element son_element = element.element("name"); // 获取节点的子节点集合
List<Element> elelist = element.elements();// 获取所有子节点
List<Element> son_elelist = element.elements(“name”);// 指定名称的子节点集合 // 获取节点属性的值
element.attributeValue("name"); // 获取元素内容
element.getText();

Element:定义XML元素

// 遍历所有子元素
Iterator elementIterator();// 遍历所有子元素
Iterator elementIterator("name");// 遍历指定名称子元素

Attribute:定义了XML的属性

getName();// 获取属性名
setName();// 设置属性名
getValue();// 获取属性值
setValue();// 设置属性值
getDocument();
setDocument();

DOM4J - XML文档操作

读取XML文件:读写XML文档主要依赖于org.dom4j.io包,有DOMReader和SAXReader两种方式。因为利用了相同的接口,它们的调用方式是一样的。

SAXReader reader = new SAXReader();

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

         // 读取XML文件,获得document对象
SAXReader reader = new SAXReader();
Document doucument = reader.read("src/NewFile.xml");
// 获取根节点
Element root = doucument.getRootElement();
// System.out.println(e.getName());//打印根标签名字 // 遍历xml节点,elementIterator()方法获得它的子节点的Element对象们的一个迭代器
for (Iterator<Element> it = root.elementIterator(); it.hasNext();) { Element ele = it.next();
System.out.println(ele.getName());
if (ele.getName().equals("good")) {
Element name = ele.element("name");
if (name != null)
System.out.println(" -" + name.getText());
}
// Attribute获取属性,并进行遍历
for (Iterator<Attribute> i = ele.attributeIterator(); i.hasNext();) {
Attribute a = i.next();
System.out.println(" " + a.getName() + ":" + a.getText()); }
}

创建XML文件:使用DocumentHelper创建新的document,在document下添加root元素,然后可以再root元素下创建各种节点。

Document document = DocumentHelper.createDocument();

Element root = document.addElement("members");// 创建根节点

         // 建立document对象,用来操作xml文件
Document newDocument = DocumentHelper.createDocument();
// 建立根节点
Element newRoot = newDocument.addElement("root");
newRoot.addComment("This is a test for dom4j ");// 加入一行注释
// 添加一个authro1节点
Element authro1 = newRoot.addElement("authro");
  // 添加属性内容
  authro1.addAttribute("name", "James");
  authro1.addAttribute("location", "UK");
  // 添加文本节点
  authro1.addText("James Strachan");
// 添加一个authro2节点
Element authro1 = newRoot.addElement("authro");
   // 添加属性内容
  authro1.addAttribute("name", "James");
   authro1.addAttribute("location", "UK");
   // 添加文本节点
   authro1.addText("James Strachan");
try {
XMLWriter writer = new XMLWriter(new FileOutputStream("[路径/]filename"));
// 将Document对象写入xml文件中
writer.write(newDocument);
} catch (Exception e) {
e.printStackTrace();
} finally {
writer.close();// 关闭流
}

格式化输出Document,创建带有OutputFormat的XMLWriter可以实现对Document的格式化输出

         // 排版
OutputFormat format = OutputFormat.createPrettyPrint();
XMLWriter writer = new XMLWriter(new FileWriter("[path]filename"), format);
writer.write(document);// 将Document对象写入xml文件中
writer.close();// 关闭流
// 紧凑
OutputFormat format = OutputFormat.createCompactFormat();
XMLWriter writer = new XMLWriter(new FileWriter("[path]filename"), format);
writer.write(document);// 将Document对象写入xml文件中
writer.close();// 关闭流

写入XML文件中文乱码问题:http://blog.sina.com.cn/s/blog_757b0e130101dqrx.html

Document转成String
String xmlText = document.asXML();
 

DOM4J -(XML解析包)的更多相关文章

  1. Java XML解析工具 dom4j介绍及使用实例

    Java XML解析工具 dom4j介绍及使用实例 dom4j介绍 dom4j的项目地址:http://sourceforge.net/projects/dom4j/?source=directory ...

  2. 【Java】XML解析之DOM4J

    DOM4J介绍 dom4j是一个简单的开源库,用于处理XML. XPath和XSLT,它基于Java平台,使用Java的集合框架,全面集成了DOM,SAX和JAXP,使用需要引用dom4j.jar包 ...

  3. XML解析【介绍、DOM、SAX详细说明、jaxp、dom4j、XPATH】

    什么是XML解析 前面XML章节已经说了,XML被设计为"什么都不做",XML只用于组织.存储数据,除此之外的数据生成.读取.传送等等的操作都与XML本身无关! XML解析就是读取 ...

  4. xml之DOM方式解析,DOM4J工具解析原理

    DOM解析原理: DOM解析原理:xml解析器一次性把整个xml文档加载进内存,然后在内存中构建一颗Document的对象树,通过Document对象,得到树上的节点对象,通过节点对象访问(操作)到x ...

  5. XML概念定义以及如何定义xml文件编写约束条件java解析xml DTD XML Schema JAXP java xml解析 dom4j 解析 xpath dom sax

    本文主要涉及:xml概念描述,xml的约束文件,dtd,xsd文件的定义使用,如何在xml中引用xsd文件,如何使用java解析xml,解析xml方式dom sax,dom4j解析xml文件 XML来 ...

  6. java之xml解析-dom4j

    解析方式 XML 解析方式有很多种,但是常用的有两种,如下: DOM Document Object Model:把整个 XML 读到内存中,形成树状结构.整个文档为 Document 对象,属性为 ...

  7. xml解析 使用dom4j操作xml

     使用dom4j操作xml 1 导入 dom4j,的jar包   2 指定要解析的XML文件 SAXReader sr=new SAXReader(); Document document= sr.r ...

  8. java的XML解析(DOM4J技术)

    DOM4J技术解析XML文件 一,XML简介 xml (可扩展标记语言)  全称: Extended Markup Language 可扩展的含义:允许程序员按照自己的想法去扩展新的标签 注意:但是扩 ...

  9. XML 解析之 dom4j 解析器

    dom4j 的使用需要导入 jar 包, 包括: dom4j-1.6.1 和 jaxen-1.1-beta 步骤: 在项目目录下,"Folder" 创建一个 lib 文件夹 复制 ...

随机推荐

  1. android studio 正式版本

    注意:以下 Android Studio 下载链接全是 dl.google.com 开头的官方下载,无需tizi,建议用浏览器直接从官方原始链接下载,不要用迅雷下载.不要用迅雷下载.不要用迅雷下载,重 ...

  2. jquery判断是pc端还是移动端

    原文地址:https://www.cnblogs.com/mo-cha/p/6038872.html $(function(){ var system = { win: false, mac: fal ...

  3. FHS 文件层次标准

    FHS:文件层次标准 操作系统自身运行使用的 /bin: 存放可执行的二进制程序,管理员和普通用户都可以使用 /sbin:管理员才能执行的命令 运行正常功能的程序存放位置 /usr/bin /usr/ ...

  4. 20.multi_case01

    # 多进程,使用Pool from multiprocessing import Pool def f(x): return x*x if __name__ == '__main__': p = Po ...

  5. spring自定义bean工厂模式解耦

    在resources下创建bean.properties accountService=cn.flypig666.service.impl.AccountServiceImpl accountDao= ...

  6. Atcoder arc096

    C:Half and Half 几个if语句贪心算一算就好了 #include<cstdio> #include<algorithm> using namespace std; ...

  7. loj2494 [hnoi2018]寻宝游戏

    题意:给你n个元素的数组a.你可以在每个元素之前添加and和or的符号.每次询问最后变成r有多少种添号情况. n<=1000,m<=5000,q<=1000. 标程: #includ ...

  8. 关于H5裁剪图片后,直传阿里云的一些问题

    这段时间在工作中碰到一个需要在h5裁剪图像,然后直传阿里云的需求.图中遇到了一些小问题,分享出来大家都看看. h5裁剪图像:cropper.js是一个神器啊关于用法,网上可以收罗出大量的帖子,这里我就 ...

  9. tcp为什么要三次握手,四次挥手

    tcp为什么要三次握手,tcp为什么可靠. 为什么不能两次握手:(防止已失效的连接请求又传送到服务器端,因而产生错误) 假设改为两次握手,client端发送的一个连接请求在服务器滞留了,这个连接请求是 ...

  10. JVM系列(四)— 原子性、可见性与有序性

    上一篇讲了Java内存模型的相关知识,模型设计正是围绕着并发过程中如何处理原子性,可见性和有序性这3个特征来建立的 一.原子性(Atomicity) 原子性的概念无需多说,熟悉事物的4个特性的应该比较 ...