- 浏览: 916917 次
- 性别:
- 来自: 上海
文章分类
- 全部博客 (263)
- J2EE (9)
- Spring (11)
- Hibernate (11)
- Struts (5)
- opensource (19)
- Hadoop (28)
- 架构设计 (8)
- 企业应用 (10)
- SNMP (8)
- SSO (4)
- webservice (11)
- RPC (2)
- 编程语言 (0)
- Java (30)
- Javascript (5)
- NoSQL (11)
- 数据库 (0)
- oracle (8)
- MySQL (3)
- web (1)
- Android (2)
- Linux (15)
- 软件工具 (15)
- 项目构建 (11)
- 测试工具 (2)
- Exception (19)
- 杂谈 (4)
- Groovy (5)
- Nodejs (1)
- MacOSX (4)
最新评论
-
fighhin:
decode(BinaryBitmap,java.util.M ...
条形码/二维码之开源利器ZXing图文介绍 -
u013489005:
追问:楼主,请问有中文文档么?我的邮箱是frankgray@s ...
Java表达式计算引擎:Expr4J -
u013489005:
感谢博主 需要引入的包是import java.io.*;im ...
Java表达式计算引擎:Expr4J -
calosteward:
感谢楼主分享。。 Zxing 我听说过的。__________ ...
条形码/二维码之开源利器ZXing图文介绍 -
u013810758:
judasqiqi 写道感谢楼主!想请问楼主一下这个生成的图片 ...
Java实现二维码QRCode的编码和解码
blog迁移至 :http://www.micmiu.com
本文从以下几个基础的方面介绍dom4j操作XML的使用小结:
- [一] 读取XML文件 的示例
- [二] 读取XML字符串 的示例
- [三] 解析XML的document 的示例
- [四] XML编码格式转换 的示例
-
[五]
输出格式的自定义
的示例
- [六] XML输出文件的示例
[一]、读取XML文件:
xml示例的文件d:/test/michael/dom4j_info.xml,内容如下:
<?xml version="1.0" encoding="UTF-8"?> <root> <info index="1" type="blog"> <URL>http://sjsky.iteye.com</URL> <name id="sjsky">Michael</name> <categories> <category valule="java"/> <category valule="spring"/> <category valule="hibernate"/> <category valule="NoSQL"/> <category valule="MYSQL"/> </categories> </info> </root>
读取文件的Java代码如下:
String fileName = "d:/test/michael/dom4j_info.xml"; try { SAXReader reader = new SAXReader(); Document document = reader.read(new File(fileName)); System.out.println("document转化为String输出如下:"); System.out.println(document.asXML()); } catch (Exception e) { e.printStackTrace(); }
document转化为String输出如下: <?xml version="1.0" encoding="UTF-8"?> <root> <info index="1" type="blog"> <URL>http://sjsky.iteye.com</URL> <name id="sjsky">Michael</name> <categories> <category valule="java"/> <category valule="spring"/> <category valule="hibernate"/> <category valule="NoSQL"/> <category valule="MYSQL"/> </categories> </info> </root>
ps:一般默认以XML文件中encoding定义的编码格式读取文件 。
[二]、读取XML字符串:
Java读取String的demo代码:
System.out.println("解析XML字符串DEMO"); String xmlStr = "<root><info index=\"1\" type=\"blog\">" + "<URL>http://sjsky.iteye.com</URL>" + "<name id=\"sjsky\">Michael</name>" + "<categories><category valule=\"java\"/>" + "<category valule=\"spring\"/><category valule=\"hibernate\"/>" + "<category valule=\"NoSQL\"/><category valule=\"MYSQL\"/>" + "</categories></info></root>"; try { Document document = DocumentHelper.parseText(xmlStr); System.out.println("document信息输出,默认为UTF-8的编码:"); System.out.println(document.asXML()); } catch (Exception e) { e.printStackTrace(); }
运行结果输出如下:
解析XML字符串DEMO
document信息输出,默认为UTF-8的编码:
<?xml version="1.0" encoding="UTF-8"?>
<root><info index="1" type="blog"><URL>http://sjsky.iteye.com</URL><name id="sjsky">Michael</name><categories><category valule="java"/><category valule="spring"/><category valule="hibernate"/><category valule="NoSQL"/><category valule="MYSQL"/></categories></info></root>
document信息输出,默认为UTF-8的编码:
<?xml version="1.0" encoding="UTF-8"?>
<root><info index="1" type="blog"><URL>http://sjsky.iteye.com</URL><name id="sjsky">Michael</name><categories><category valule="java"/><category valule="spring"/><category valule="hibernate"/><category valule="NoSQL"/><category valule="MYSQL"/></categories></info></root>
ps:1.默认输出编码为UTF-8
2.输出字符串格式定义参见本文 第[五]部分
[三]、解析XML的Document
/** * 解析文件 * @blog http://sjsky.iteye.com * @param fileName */ public static void readXMLFile(String fileName) { try { SAXReader reader = new SAXReader(); Document document = reader.read(new File(fileName)); readXML(document); } catch (Exception e) { e.printStackTrace(); } } public static void readXML(Document document) { try { System.out.println("开始解析 XML Document:"); // 获取跟节点 Element rootEle = document.getRootElement(); System.out.println("获取跟节点Root:"); System.out.println(rootEle.asXML()); // 根据名称获取Element Element info = rootEle.element("info"); System.out.println("获取Root下名称为info的子Element:"); System.out.println(info.asXML()); // 根据名称获取List<Element> List<Element> infolist = rootEle.elements("info"); System.out.println("和上面获取的Element应该一致:"); System.out.println(infolist.get(0).asXML()); // 获取属性值 System.out.println("获取指定属性type的值 = " + info.attributeValue("type")); // 获取所有的属性值 for (int i = 0; i < info.attributeCount(); i++) { System.out.println("获取所有的属性和值: " + info.attribute(i).getName() + " = " + info.attribute(i).getValue()); } // XPath的功能展示 Node node1 = document.selectSingleNode("/root/info/name"); System.out.println("根据XPath=/root/info/name获取document下的ELement : " + node1.asXML()); Node node2 = rootEle.selectSingleNode("info/name"); System.out.println("根据XPath=info/name 获取root下的ELement : " + node2.asXML()); Node node3 = rootEle.selectSingleNode("//info/name"); System.out.println("根据XPath=//info/name 获取root下的ELement : " + node3.asXML()); System.out.println("上述三种方式获取的结果应该是一致"); List<?> nodeList = rootEle .selectNodes("//info/categories/category"); System.out .println("根据XPath=//info/categories/category获取root下的List:"); for (int i = 0; i < nodeList.size(); i++) { System.out.println(((Element) nodeList.get(i)).asXML()); } } catch (Exception e) { e.printStackTrace(); } }
开始解析 XML Document: 获取跟节点Root: <root> <info index="1" type="blog"> <URL>http://sjsky.iteye.com</URL> <name id="sjsky">Michael</name> <categories> <category valule="java"/> <category valule="spring"/> <category valule="hibernate"/> <category valule="NoSQL"/> <category valule="MYSQL"/> </categories> </info> </root> 获取Root下名称为info的子Element: <info index="1" type="blog"> <URL>http://sjsky.iteye.com</URL> <name id="sjsky">Michael</name> <categories> <category valule="java"/> <category valule="spring"/> <category valule="hibernate"/> <category valule="NoSQL"/> <category valule="MYSQL"/> </categories> </info> 和上面获取的Element应该一致: <info index="1" type="blog"> <URL>http://sjsky.iteye.com</URL> <name id="sjsky">Michael</name> <categories> <category valule="java"/> <category valule="spring"/> <category valule="hibernate"/> <category valule="NoSQL"/> <category valule="MYSQL"/> </categories> </info> 获取指定属性type的值 = blog 获取所有的属性和值: index = 1 获取所有的属性和值: type = blog 根据XPath=/root/info/name获取document下的ELement : <name id="sjsky">Michael</name> 根据XPath=info/name 获取root下的ELement : <name id="sjsky">Michael</name> 根据XPath=//info/name 获取root下的ELement : <name id="sjsky">Michael</name> 上述三种方式获取的结果应该是一致 根据XPath=//info/categories/category获取root下的List: <category valule="java"/> <category valule="spring"/> <category valule="hibernate"/> <category valule="NoSQL"/> <category valule="MYSQL"/>
ps:1. XPath的使用依赖lib包:jaxen.jar
2. XPath的简单介绍说明(以后有机会做个详细介绍)
- nodename 选取此节点的所有子节点(相对路径)
- / 从根节点选取(绝对路径)
- // 从匹配选择的当前节点选择文档中的节点,而不考虑它们的位置
- . 选取当前节点
- .. 选取当前节点的父节点
- @ 选取属性
[四]、XML编码格式转换:
/** * @blog http://sjsky.iteye.com * @param args */ public static void main(String[] args) { String xmlStr = "<root><info index=\"1\" type=\"blog\">" + "<URL>http://sjsky.iteye.com</URL>" + "<name id=\"sjsky\">Michael</name>" + "<categories><category valule=\"java\"/>" + "<category valule=\"spring\"/><category valule=\"hibernate\"/>" + "<category valule=\"NoSQL\"/><category valule=\"MYSQL\"/>" + "</categories></info></root>"; System.out.println("XML编码转化DEMO"); try { Document document = DocumentHelper.parseText(xmlStr); System.out.println("默认为UTF-8的编码,输出内容如下:"); System.out.println(document.asXML()); System.out.println("编码转化为gb2312后,输出内容如下:"); String encodeStr = encodeXml(xmlStr, "gb2312"); System.out.println(encodeStr); } catch (Exception e) { e.printStackTrace(); } System.out.println("DEMO End---------------------"); }
XML编码转化DEMO 默认为UTF-8的编码,输出内容如下: <?xml version="1.0" encoding="UTF-8"?> <root><info index="1" type="blog"><URL>http://sjsky.iteye.com</URL><name id="sjsky">Michael</name><categories><category valule="java"/><category valule="spring"/><category valule="hibernate"/><category valule="NoSQL"/><category valule="MYSQL"/></categories></info></root> 编码转化为gb2312后,输出内容如下: <?xml version="1.0" encoding="gb2312"?> <root> <info index="1" type="blog"> <URL>http://sjsky.iteye.com</URL> <name id="sjsky">Michael</name> <categories> <category valule="java"/> <category valule="spring"/> <category valule="hibernate"/> <category valule="NoSQL"/> <category valule="MYSQL"/> </categories> </info> </root> DEMO End---------------------
[五]、XML输出格式的定义:
-
OutputFormat compactFormat = OutputFormat.createCompactFormat(); 紧凑的格式
- OutputFormat prettyFormat = OutputFormat.createPrettyPrint(); 优雅具有层次的格式
/** * @blog http://sjsky.iteye.com * @param args */ public static void main(String[] args) { String xmlStr = "<root><info index=\"1\" type=\"blog\">" + "<URL>http://sjsky.iteye.com</URL>" + "<name id=\"sjsky\">Michael</name>" + "<categories><category valule=\"java\"/>" + "<category valule=\"spring\"/><category valule=\"hibernate\"/>" + "<category valule=\"NoSQL\"/><category valule=\"MYSQL\"/>" + "</categories></info></root>"; System.out.println("XML输出格式定义Demo:"); try { Document document = DocumentHelper.parseText(xmlStr); System.out.println("转换为优雅层次的格式输出:"); OutputFormat prettyFormat = OutputFormat.createPrettyPrint(); String xmlPretty = xmlOutputFormat(document, prettyFormat); System.out.println(xmlPretty); System.out.println("转换为紧凑格式输出:"); OutputFormat compactFormat = OutputFormat.createCompactFormat(); String xmlCompact = xmlOutputFormat(document, compactFormat); System.out.println(xmlCompact); } catch (Exception e) { e.printStackTrace(); } System.out.println("DEMO End---------------------"); } /** * XML 输出格式转换 * @param document * @param opFormat * @return String */ public static String xmlOutputFormat(Document document, OutputFormat opFormat) { // 具有层次的格式输出 // OutputFormat format = OutputFormat.createPrettyPrint(); // 紧凑的格式输出 // OutputFormat format = OutputFormat.createCompactFormat(); StringWriter sw = new StringWriter(); try { XMLWriter writer = new XMLWriter(opFormat); writer.setWriter(sw); writer.write(document); } catch (Exception e) { e.printStackTrace(); } return sw.toString(); }
XML输出格式定义Demo: 转换为优雅层次的格式输出: <?xml version="1.0" encoding="UTF-8"?> <root> <info index="1" type="blog"> <URL>http://sjsky.iteye.com</URL> <name id="sjsky">Michael</name> <categories> <category valule="java"/> <category valule="spring"/> <category valule="hibernate"/> <category valule="NoSQL"/> <category valule="MYSQL"/> </categories> </info> </root> 转换为紧凑格式输出: <?xml version="1.0" encoding="UTF-8"?> <root><info index="1" type="blog"><URL>http://sjsky.iteye.com</URL><name id="sjsky">Michael</name><categories><category valule="java"/><category valule="spring"/><category valule="hibernate"/><category valule="NoSQL"/><category valule="MYSQL"/></categories></info></root> DEMO End---------------------
[六]、XML输出文件:
/** * @blog http://sjsky.iteye.com * @author Michael * @param args */ public static void main(String[] args) { String xmlStr = "<root><info index=\"1\" type=\"blog\">" + "<URL>http://sjsky.iteye.com</URL>" + "<name id=\"sjsky\">Michael</name>" + "<categories><category valule=\"java\"/>" + "<category valule=\"spring\"/><category valule=\"hibernate\"/>" + "<category valule=\"NoSQL\"/><category valule=\"MYSQL\"/>" + "</categories></info></root>"; System.out.println("XML输出文件:"); String outFileName = "d:/test/michael/"; try { Document document = DocumentHelper.parseText(xmlStr); xmlWriteXMLDoc(outFileName+"dom4j_info_out1.xml", document); fileWriteXMLDoc(outFileName+"dom4j_info_out2.xml", document); } catch (Exception e) { e.printStackTrace(); } System.out.println("DEMO End---------------------"); } /** * * @param fileName * @param document */ public static void xmlWriteXMLDoc(String fileName, Document document) { XMLWriter writer = null; try { //writer = new XMLWriter(new FileWriter(fileName)); //writer = new XMLWriter(new FileWriter(fileName),OutputFormat.createCompactFormat()); writer = new XMLWriter(new FileWriter(fileName),OutputFormat.createPrettyPrint()); writer.write(document); } catch (Exception e) { e.printStackTrace(); } finally { try { if (null != writer) { writer.close(); } } catch (Exception e) { e.printStackTrace(); } } } /** * * @param fileName * @param document */ public static void fileWriteXMLDoc(String fileName, Document document) { FileWriter fw = null; try { fw = new FileWriter(fileName); document.write(fw); } catch (Exception e) { e.printStackTrace(); } finally { try { if (null != fw) { fw.close(); } } catch (Exception e) { e.printStackTrace(); } } }
生成的dom4j_info_out1.xml文件内容如下:
<?xml version="1.0" encoding="UTF-8"?> <root> <info index="1" type="blog"> <URL>http://sjsky.iteye.com</URL> <name id="sjsky">Michael</name> <categories> <category valule="java"/> <category valule="spring"/> <category valule="hibernate"/> <category valule="NoSQL"/> <category valule="MYSQL"/> </categories> </info> </root>
生成的dom4j_info_out2.xml文件内容如下:
<?xml version="1.0" encoding="UTF-8"?> <root><info index="1" type="blog"><URL>http://sjsky.iteye.com</URL><name id="sjsky">Michael</name><categories><category valule="java"/><category valule="spring"/><category valule="hibernate"/><category valule="NoSQL"/><category valule="MYSQL"/></categories></info></root>
到此有关dom4j的简单应用基本介绍完了,希望给新接触的tx有所帮助。
本文连接:http://sjsky.iteye.com/blog/1239872
转载请注明来自:Michael's blog @ http://sjsky.iteye.com
----------------------------- 分 ------------------------------ 隔 ------------------------------ 线 ------------------------------
发表评论
-
github更新自己Fork的代码
2014-03-09 22:52 1186github上有个功能叫fork,可以将别人的工程复制 ... -
Eclipse+OpenORB+ORBStudio配置CORBA开发环境
2013-10-24 09:04 1711目录 准备工作 整合配置 [一]、准备工作 -
openfire数据库配置说明
2013-04-26 11:29 1695数据库配置是在 conf/openfire.xml ... -
Shiro在web应用中实现验证码功能
2013-04-09 11:44 2962目录结构: 概述 扩展shiro认证 验证码工具 ... -
Openfire插件开发坏境配置指南
2013-03-19 14:24 963本文主要是介绍Openfire插件开发的环境配置,该指南是在 ... -
Openfire源码导入Eclipse编译配置指南
2013-03-19 09:26 3549本文将图文介绍如何把openfire(以3.8.1为例)源码 ... -
Openfire服务端安装和配置
2013-03-19 09:24 1086图文详细介绍Openfire服务端安装和配置的过程 ... -
iText实现直接把URL网页内容生成PDF
2012-11-28 10:44 3391目录: 概述 软件要求 实现过程 ... -
iText XML Worker实现HTML转PDF
2012-11-27 09:47 1850目录: 概述 两种应用场景的实现 ... -
iText XML Worker修改源码完美支持HTML中文字符转PDF
2012-11-27 08:59 2394目录: 介绍 中文字符转换 转换 ... -
iText生成PDF的书签
2012-11-26 13:46 2036主要演示iText生成PDF的书签功能,基本介绍详见代码中的注 ... -
iText生成PDF入门
2012-11-26 09:30 1125目录: 介绍 实验环境 入门 ... -
jldap实现Java对LDAP的基本操作
2012-07-03 15:17 2296目录: 概述 基本操作 查询 添加 删除 ... -
Simple XML
2011-09-28 23:55 5112blog迁移至 :http://www.micmiu. ... -
Open Flash Chart2实现动态曲线图小结
2011-04-18 10:49 6396blog迁移至:http://www.micmiu.c ... -
HttpClient、HTMLParser解决Google搜索结果的页面无法解析问题
2010-11-04 09:20 4568blog迁移至:http://www.micmiu.c ... -
HTMLParser初试
2010-11-03 09:22 1939blog迁移至:http://www.micmiu.c ... -
Open Flash Chart2应用(实现flash另存为图片)
2010-04-22 08:43 8654blog迁移至:http://www.micmiu.c ...
相关推荐
在项目中使用DOM4J时,只需将相应的jar包(如dom4j-1.6.1.jar、dom4j-2.0.2.jar或dom4j-2.1.1.jar)导入到类路径中,即可开始利用其功能处理XML文档。导入后,可以按照DOM4J提供的API进行编程,快速实现XML的读写...
DOM4J 的使用 DOM4J 是一个开源的 XML 解析包,由 dom4j.org 出品,应用于 Java 平台,采用了 Java 集合框架并完全支持 DOM、SAX 和 JAXP。DOM4J 的主要特点是使用大量的接口,所有主要接口都在 org.dom4j 里面定义...
4. **文档对象模型**:DOM4J提供了一个类似于DOM的文档对象模型,但比DOM更轻量级,且更容易扩展。它允许开发者以面向对象的方式操作XML结构。 5. **灵活性**:DOM4J可以轻松地与Spring、Hibernate等框架集成,广泛...
DOM4J是一个强大的Java库,专门用于处理XML文档。它提供了灵活、高效的API,使得XML的解析、创建、修改和查询变得简单。...了解并掌握DOM4J的使用,对于任何涉及XML的Java开发者来说都是非常有价值的技能。
**标题解析:** "dom4j入门资料全.rar" 这个标题表明这是一个关于dom4j初学者的综合资源包,包含多种类型的资料,可能是为了帮助用户快速掌握dom4j这个Java库的基础知识。 **描述解析:** "包含jar,电子书,网页...
总之,DOM4J 1.6.1是一个功能强大且广泛使用的XML处理库,它的Maven集成使得在Java项目中使用变得方便。无论是创建XML文档、查询XML结构还是进行XML数据操作,DOM4J都能提供简洁、高效的API。在安装和使用过程中,...
**DOM4J使用教程** DOM4J是一款非常优秀的Java XML API,它提供了全面而强大的功能,包括XML的解析、创建、修改以及查询等操作。在Java世界中,DOM4J因其简单易用和高效性而备受青睐。这篇教程将深入探讨DOM4J的...
5. **集成性**:DOM4J与Spring、Hibernate等框架有良好的集成,方便在企业级应用中使用。 在实际开发中,DOM4J常用于读取XML配置文件、解析XML数据、生成XML报告等场景。例如,通过`Document`对象读取XML文件,然后...
通过阅读和实践DOM4J的帮助文档和使用教程,开发者可以全面掌握DOM4J的各种特性和用法,从而更高效地处理XML数据。这个压缩包提供的资料全面且详细,对于想要深入理解DOM4J的Java开发人员来说,是一份非常宝贵的资源...
标题提及的"dom4j_1.6.1.jar"和"dom4j_2.1.0.jar"是两个不同版本的DOM4J库的Java档案文件,DOM4J是一个非常流行的Java XML API,用于处理XML文档。这两个版本的差异在于功能、性能优化和可能存在的bug修复。描述中...
**DOM4J使用简介** DOM4J 是一个强大的 Java 库,专为处理 XML 文档而设计。它提供了丰富的 API,使得在 Java 中解析、创建、修改 XML 文件变得简单高效。DOM4J 不仅支持 DOM(文档对象模型)和 SAX(简单API for ...
通过理解并熟练使用DOM4J,开发者可以更高效地处理XML相关的任务,提高代码的可维护性和可读性。同时,由于其开源和社区活跃,DOM4J还拥有丰富的文档和社区支持,遇到问题时可以方便地找到解决方案。
1. 加载XSD文件:使用DOM4J的DocumentHelper类的parse方法,传入XSD文件的路径,得到一个SchemaFactory对象。 ```java SchemaFactory schemaFactory = DocumentHelper.createSchema(new File("path_to_xsd_file.xsd...
DOM4J是基于DOM模型的,但相比Java内置的DOM API,DOM4J更轻量级且易于使用。它支持XPath查询,提供了丰富的事件处理机制,并且与JDOM和XOM等其他XML库有良好的互操作性。DOM4J的2.0.3版本修复了一些已知问题,提升...
DOM4J采用了Document Object Model (DOM)接口,但它的实现更加轻量级,性能更优。DOM4J的核心类包括`Element`、`Attribute`、`Document`和`Namespace`等,它们分别代表了XML文档中的元素、属性、文档和命名空间。 *...
2. **创建XML文件**:使用DOM4j创建一个新的XML文件,这通常涉及到`Document`、`Element`和`Writer`的使用。例如,你可以创建一个包含根元素和子元素的XML文件。 3. **动态创建XML节点**:在已有的XML文档中动态...
标题提到的"所有版本的dom4j工具包"表明这是一个包含多版本DOM4J库的集合,可能包括了从早期到较新的一些版本,如dom4j-1.4.jar、dom4j-1.6.1.jar和dom4j-1.5.2.jar。这些不同版本的库可能分别对应于不同的功能特性...
DOM4J是一个强大的Java库,专门用于处理XML文档。它提供了灵活且高效的API,使得XML的解析、创建、修改和查询变得简单。DOM4J的名字来源于“Document Object Model for Java”,它采用面向对象的设计思想,提供了...
DOM4J则是基于DOM的一种轻量级API,它弥补了DOM的一些不足,比如性能问题和内存消耗。DOM4J通过提供SAX(Simple API for XML)和DOM的接口,使开发者可以选择更适合他们应用场景的方法来处理XML。 在DOM4J 1.6.1中...