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. c++中变量、变量名、变量地址、指针、引用等含义

    首先了解内存,内存就是一排房间,编号从0开始,0,1,2,3,4,5...... 房间里面一定要住人,新人住进去了,原来的人就走了:不管你住不住,里面都有人. 编号就是地址.里面的人就是内容,为了我们 ...

  2. 09_springmvc图片上传

    一.上传图片 1.需求 在修改商品页面,添加上传商品图片的功能 2.springmvc中对多部件类型解析 在页面form中提交enctype="multipart/form-data&quo ...

  3. USACO training course Number Triangles 数塔 /// DP oj10122

    题目大意: ...就是数塔       7         3   8      8   1   0     2   7   4   4 4   5   2   6   5 7+3+8+7+5=30 ...

  4. Sequence POJ - 3581 后缀数组

    题意: 将一个序列分成非空的三部分,将每部分翻转后组合成一个新的序列, 输出这样操作得到的序列中字典序最小的序列 (保证第一个数是数组中最大的元素) 题解: 把数组当作串串. 因为第一个数最大,所以我 ...

  5. java_缓冲流(字符输出流)

    /** 字符缓冲流: * java.io.BufferedWriter extends writer * BufferedWriter:字符缓冲输出流: * * 构造方法: * BufferedWri ...

  6. 2019-8-2-WPF-依赖属性绑定不上调试方法

    title author date CreateTime categories WPF 依赖属性绑定不上调试方法 lindexi 2019-08-02 19:56:32 +0800 2019-8-2 ...

  7. 移植 TinyLogin

    下载 从 http://tinylogin.busybox.net/downloads/tinylogin­1.4.tar.bz2下载 tinylogin­1.4 到/tmp 目录当中,并解压. 修改 ...

  8. 安卓中 使用html来使文字变色Html.fromHtml

    在这里  我是用的html使文字的个别颜色变红 String textStr = " 本课程为<font color=\"#FF0000\">" + ...

  9. UVA - 374

    https://vjudge.net/problem/19685/origin 费马小定理优化快速幂 因为加了费马小定理优化,小心2 2 2这种情况,会出现0 0 2,也就是0的0次方,实际答案为0 ...

  10. day05 创建用户过程、文件夹,文件等权限修改等

    linux创建用户时修改到的文件 /etc/passwd //存放用户信息 /etc/shadow //存放用户密码信息 /etc/group //存放用户组信息 /etc/gshadow //存放组 ...