本文从以下几个基础的方面介绍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>
ps:1.默认输出编码为UTF-8
2.输出字符串格式定义参见本文 第[五]部分
[三]、解析XML的Document
-
-
-
-
-
- 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 info = rootEle.element("info");
- System.out.println("获取Root下名称为info的子Element:");
- System.out.println(info.asXML());
-
-
- 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());
- }
-
-
- 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编码格式转换:
-
-
-
-
- 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(); 优雅具有层次的格式
-
-
-
-
- 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---------------------");
- }
-
-
-
-
-
-
-
- public static String xmlOutputFormat(Document document,
- OutputFormat opFormat) {
-
-
-
-
- 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输出文件:
-
-
-
-
-
- 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---------------------");
- }
-
-
-
-
-
-
- public static void xmlWriteXMLDoc(String fileName, Document document) {
- XMLWriter writer = null;
- try {
-
-
- 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();
- }
- }
- }
-
-
-
-
-
-
- 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
分享到:
相关推荐
【dom4j基础入门文档(SAX,DOM,XPATH)】 dom4j是一个流行的Java库,专门用于处理XML文档。相较于W3C DOM API,dom4j的优势在于它内置了本地XPath支持,使得XML文档的查询和操作更为简便。本文将深入介绍dom4j的...
**标题解析:** "dom4j入门资料全.rar" 这个标题表明这是一个关于dom4j初学者的综合资源包,包含多种类型的资料,可能是为了帮助用户快速掌握dom4j这个Java库的基础知识。 **描述解析:** "包含jar,电子书,网页...
压缩包中的“使用说明.txt”很可能是DOM4J的快速入门指南或API参考,它可能包含了如何导入库、创建XML文档、执行XPath查询、修改XML结构等基础用法的示例代码。对于初次使用者来说,这份文档是理解DOM4J功能和用法的...
在本文中,我们将深入探讨DOM4J的基础用法,帮助初学者快速入门。 **1. 安装与引入** 在开始使用DOM4J之前,首先需要将DOM4J库引入到项目中。如果你使用的是Maven,可以在pom.xml文件中添加如下依赖: ```xml ...
- **DOM4J入门**:学习DOM4J的基本API,包括创建、解析、输出XML文档,以及节点操作。 - **XPath应用**:掌握XPath查询语言,能够灵活定位XML节点。 - **源码研读**:深入阅读DOM4J源码,理解其实现机制。 - **实战...
**标题解析:** "一个简单的Dom4j学习的例子" 暗示了我们将探讨的是如何使用Dom4j这个Java库来处理XML文档的基础知识。Dom4j是一个灵活且高效的XML处理库,它提供了丰富的API来读取、写入、修改XML文档。 **描述...
了解了这些基础知识后,你就可以借助DOM4J有效地在Java应用中处理XML了。无论你是进行配置文件的读取、XML数据的交换还是XML文档的生成,DOM4J都能提供强大且易用的工具。记住,"index.html"是你的得力助手,它能...
- `HTML DOM 教程.CHM`:这个教程涵盖了HTML DOM的基础知识,包括节点操作、事件处理等,适合初学者入门。 通过深入了解DOM4J和HTML DOM,开发者可以更好地处理XML和HTML文档,提高应用程序的灵活性和交互性。结合...
3)Dom4j 快速入门 2)lib 目录 3)src 目录是第三方类库的源码目录: 可进我的博客看文章 javaweb-05xml 第三节部分 早期 JDK 为我们提供了两种 xml 解析技术 DOM 和 Sax 简介(已经过时,但我们需要知道这两种...
**DOM4J基础** DOM4J是一个开放源码的Java库,它提供了灵活且高效的方式来解析、创建和操作XML文档。其主要功能包括: 1. **XML解析**:DOM4J可以将XML文件解析为一棵树结构的Document对象,便于对XML数据进行遍历...
本文将详细介绍四种主流的Java XML处理库:DOM4J、DOM、JDOM和SAX,并通过简单的代码示例帮助初学者入门。 1. DOM (Document Object Model) DOM是W3C制定的一种标准,它将XML文档视为一个树形结构,允许开发者通过...
- **DOM4J使用简介.doc**: 提供了dom4j的基础使用介绍,适合初学者入门。 - **dom4j中文教程26more.rar**: 可能包含26个以上的教程,深入讲解dom4j的各种功能。 - **Dom4jXML**: 可能是一个包含XML处理示例的项目...
本专题《web+dom4j》聚焦于Web开发领域,并结合了强大的XML处理库dom4j,旨在帮助初学者快速入门并掌握这两项技术。 首先,我们要了解Web开发的基础。Web开发主要是构建可以通过互联网访问的应用程序,这些应用程序...
4. JDOM或dom4j库:提供了更高级别的API,简化了XML操作,如dom4j的`Document`和`Element`类。 创建XML文件同样重要。你可以使用DOM API创建元素,然后用`Transformer`将其转换为XML输出。对于更新XML,可以找到...
综上所述,"xml读写入门教程"涵盖了XML的基本概念、DOM4J的使用、XML与Java JDBC的结合以及可能的实战练习。通过学习这些内容,开发者可以有效地在Java项目中处理XML数据,实现数据的读取、写入和交换。
### jQuery基础入门知识点详解 #### 一、jQuery简介 ##### 1.1 什么是jQuery? - **起源与发展**:jQuery是由美国人John Resig在2006年创建的一个JavaScript库。随着时间的发展,该项目吸引了很多世界级的...
XML的处理方式主要有三种:SAX、DOM以及DOM4J,它们各有优势和适用场景: - **SAX(Simple API for XML)**:这是一种基于事件驱动的模型,适合于处理大型的XML文件。SAX逐行读取并解析XML文件,因此在内存占用上比...
### JQuery基础入门详解 #### 一、JQuery简介 JQuery是一个开源的JavaScript库,它极大地简化了HTML文档的操作、事件处理、动画效果以及Ajax交互。由美国开发者John Resig于2006年初创立,随后吸引了全球各地的...
- `dom4j.jar`或`jdom.jar`:XML处理库,Hibernate的HQL查询结果集转换为XML时会用到。 - `slf4j-api.jar`和相应的实现(如`slf4j-log4j12.jar`):日志记录框架,Hibernate使用它来输出日志信息,便于调试和监控...
**jQuery的jar包入门基础** jQuery是一款广泛应用于Web开发的JavaScript库,它极大地简化了JavaScript的DOM操作、事件处理、动画制作以及Ajax交互。在Java环境中,通过引入jQuery的jar包,开发者可以在服务器端...