dom4解析 XML
Java XML解析工具 dom4j介绍及使用实例
Java XML解析工具 dom4j介绍及使用实例
dom4j介绍
dom4j的项目地址:http://sourceforge.net/projects/dom4j/?source=directory
dom4j是一个简单的开源库,用于处理XML、 XPath和XSLT,它基于Java平台,使用Java的集合框架,全面集成了DOM,SAX和JAXP。
dom4j的使用
下载了dom4j项目之后,解压缩,将其jar包(我的当前版本叫做dom4j-1.6.1.jar)加入class path下面。
(Properties->Java Build Path -> Add External JARs...)。
之后就可以使用其提供的API进行编程。
程序实例1
第一个程序,用Java代码生成xml文档,代码如下:

- package com.example.xml.dom4j;
- import java.io.FileOutputStream;
- import java.io.FileWriter;
- import org.dom4j.Document;
- import org.dom4j.DocumentHelper;
- import org.dom4j.Element;
- import org.dom4j.io.OutputFormat;
- import org.dom4j.io.XMLWriter;
- /**
- * dom4j框架学习 使用dom4j框架创建xml文档并输出保存
- *
- */
- public class Dom4JTest1
- {
- public static void main(String[] args) throws Exception
- {
- // 第一种方式:创建文档,并创建根元素
- // 创建文档:使用了一个Helper类
- Document document = DocumentHelper.createDocument();
- // 创建根节点并添加进文档
- Element root = DocumentHelper.createElement("student");
- document.setRootElement(root);
- // 第二种方式:创建文档并设置文档的根元素节点
- Element root2 = DocumentHelper.createElement("student");
- Document document2 = DocumentHelper.createDocument(root2);
- // 添加属性
- root2.addAttribute("name", "zhangsan");
- // 添加子节点:add之后就返回这个元素
- Element helloElement = root2.addElement("hello");
- Element worldElement = root2.addElement("world");
- helloElement.setText("hello Text");
- worldElement.setText("world text");
- // 输出
- // 输出到控制台
- XMLWriter xmlWriter = new XMLWriter();
- xmlWriter.write(document);
- // 输出到文件
- // 格式
- OutputFormat format = new OutputFormat(" ", true);// 设置缩进为4个空格,并且另起一行为true
- XMLWriter xmlWriter2 = new XMLWriter(
- new FileOutputStream("student.xml"), format);
- xmlWriter2.write(document2);
- // 另一种输出方式,记得要调用flush()方法,否则输出的文件中显示空白
- XMLWriter xmlWriter3 = new XMLWriter(new FileWriter("student2.xml"),
- format);
- xmlWriter3.write(document2);
- xmlWriter3.flush();
- // close()方法也可以
- }
- }

程序Console输出:
- <?xml version="1.0" encoding="UTF-8"?>
- <student/>
生成的一个xml文档:

- <?xml version="1.0" encoding="UTF-8"?>
- <student name="zhangsan">
- <hello>hello Text</hello>
- <world>world text</world>
- </student>

程序实例2
程序实例2,读入xml文档并分析,将其内容输出。
首先,待分析的文档如下:

- <?xml version="1.0" encoding="UTF-8"?>
- <students name="zhangsan">
- <hello name="lisi">hello Text1</hello>
- <hello name="lisi2">hello Text2</hello>
- <hello name="lisi3">hello Text3</hello>
- <world name="wangwu">world text1</world>
- <world name="wangwu2">world text2</world>
- <world >world text3</world>
- </students>

Java代码:

- package com.example.xml.dom4j;
- import java.io.File;
- import java.util.Iterator;
- import java.util.List;
- import javax.xml.parsers.DocumentBuilder;
- import javax.xml.parsers.DocumentBuilderFactory;
- import org.dom4j.Document;
- import org.dom4j.Element;
- import org.dom4j.io.DOMReader;
- import org.dom4j.io.SAXReader;
- /**
- * dom4j框架学习: 读取并解析xml
- *
- *
- */
- public class Dom4JTest2
- {
- public static void main(String[] args) throws Exception
- {
- SAXReader saxReader = new SAXReader();
- Document document = saxReader.read(new File("students.xml"));
- // 获取根元素
- Element root = document.getRootElement();
- System.out.println("Root: " + root.getName());
- // 获取所有子元素
- List<Element> childList = root.elements();
- System.out.println("total child count: " + childList.size());
- // 获取特定名称的子元素
- List<Element> childList2 = root.elements("hello");
- System.out.println("hello child: " + childList2.size());
- // 获取名字为指定名称的第一个子元素
- Element firstWorldElement = root.element("world");
- // 输出其属性
- System.out.println("first World Attr: "
- + firstWorldElement.attribute(0).getName() + "="
- + firstWorldElement.attributeValue("name"));
- System.out.println("迭代输出-----------------------");
- // 迭代输出
- for (Iterator iter = root.elementIterator(); iter.hasNext();)
- {
- Element e = (Element) iter.next();
- System.out.println(e.attributeValue("name"));
- }
- System.out.println("用DOMReader-----------------------");
- DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
- DocumentBuilder db = dbf.newDocumentBuilder();
- // 注意要用完整类名
- org.w3c.dom.Document document2 = db.parse(new File("students.xml "));
- DOMReader domReader = new DOMReader();
- // 将JAXP的Document转换为dom4j的Document
- Document document3 = domReader.read(document2);
- Element rootElement = document3.getRootElement();
- System.out.println("Root: " + rootElement.getName());
- }
- }

代码运行后输出:

- Root: students
- total child count: 6
- hello child: 3
- first World Attr: name=wangwu
- 迭代输出-----------------------
- lisi
- lisi2
- lisi3
- wangwu
- wangwu2
- null
- 用DOMReader-----------------------
- Root: students

参考资料
圣思园张龙老师XML视频教程。
源代码下载处:http://sourceforge.net/
搜索dom4j:http://sourceforge.net/projects/dom4j/?source=directory
dom4解析 XML的更多相关文章
- dom4解析xml格式文件实例
以下给4种常见的xml文件的解析方式的分析对比: DOM DOM4J JDOM SAX 解析XML文件的几种方式和区别答: Dom解析 在内存中创建一个DOM树,该结构通常需要加载整个文档然后才能做工 ...
- 使用Dom4解析xml
XML是一种通用的数据交换格式,它的平台无关性.语言无关性.系统无关性.给数据集成与交互带来了极大的方便. XML在不同的语言环境中解析方式都是一样的,只不过实现的语法不同而已. XML的解析方式分为 ...
- DOm4解析xml
1.创建XML文档对象的的方式有两种 1)Document document=DocumentHelper.createDocument(); 2)DocumentFactory documentFa ...
- XML的概述,.Dom4解析和SAX解析
1.什么是XML XML 指可扩展标记语言(EXtensible Markup Language) html(hyper text markup langauge) XML 是一种标记语言,很类似 H ...
- Android 解析XML文件和生成XML文件
解析XML文件 public static void initXML(Context context) { //can't create in /data/media/0 because permis ...
- Android之解析XML
1.XML:可扩展标记语言. 可扩展标记语言是一种很像超文本标记语言的标记语言. 它的设计宗旨是传输数据,而不是显示数据. 它的标记没有被预定义.需要自行定义标签. 它被设计为具有自我描述性. 是W3 ...
- Android之Pull解析XML
一.Pull解析方法介绍 除了可以使用SAX和DOM解析XML文件,也可以使用Android内置的Pull解析器解析XML文件.Pull解析器的运行方式与SAX解析器相似.它也是事件触发的.Pull解 ...
- Android之DOM解析XML
一.DOM解析方法介绍 DOM是基于树形结构的节点或信息片段的集合,允许开发人员使用DOM API遍历XML树,检索所需数据.分析该结构通常需要加载整个文档和构造树形结构,然后才可以检索和更新节点信息 ...
- Android之SAX解析XML
一.SAX解析方法介绍 SAX(Simple API for XML)是一个解析速度快并且占用内存少的XML解析器,非常适合用于Android等移动设备. SAX解析器是一种基于事件的解析器,事件驱动 ...
随机推荐
- LUOGU P1967 货车运输(最大生成树+树剖+线段树)
传送门 解题思路 货车所走的路径一定是最大生成树上的路径,所以先跑一个最大生成树,之后就是求一条路径上的最小值,用树剖+线段树,注意图可能不连通.将边权下放到点权上,但x,y路径上的lca的答案不能算 ...
- Joomla - 权限系统(访问权限限制)
Joomla - 权限系统,以下以全局配置的权限设置为例,每个扩展都有自己的权限设置
- linux mint & ubuntu 安装QQ国际版
ubuntu安装QQ相对简单 下载qq国际版deb文件,直接安装即可. 下载地址: http://pan.baidu.com/s/1hqmYzlU 下面就重点说一下linux mint 安装qq. 1 ...
- python面向对象应用-1
#猫 定义类 class Cat: type = '猫' #通过__init__初始化的特征 def __init__(self,nickname,age,color): self.nickname ...
- VIsualSVN server 安装及旧仓库导入
安装参考: 1, http://www.cnblogs.com/xiaobaihome/archive/2012/03/20/2407610.html SVN服务器搭建和使用(一) Subversi ...
- storm一些可调节的参数
# Licensed to the Apache Software Foundation (ASF) under one # or more contributor license agreeme ...
- 不同版本springboot上传文件大小设置
参考原文:https://blog.csdn.net/awmw74520/article/details/70230591 Spring Boot 1.3.x或者之前 multipart.maxFil ...
- File- Linux必学的60个命令
1.作用 件内容判断文件类型,使用权限是所有用户. 2.格式 file通过探测文 file [options] 文件名 3.[options]主要参数 -v:在标准输出后显示版本信息,并且退出. -z ...
- Luogu P1850 换教室(期望dp)
P1850 换教室 题意 题目描述 对于刚上大学的牛牛来说,他面临的第一个问题是如何根据实际情况申请合适的课程. 在可以选择的课程中,有\(2n\)节课程安排在\(n\)个时间段上.在第\(i(1\l ...
- Luogu P4782 【模板】2-SAT 问题(2-SAT)
P4782 [模板]2-SAT 问题 题意 题目背景 \(2-SAT\)问题模板 题目描述 有\(n\)个布尔变量\(x_1\sim x_n\),另有\(m\)个需要满足的条件,每个条件的形式都是&q ...