- 浏览: 252003 次
- 性别:
- 来自: 北京
文章分类
- 全部博客 (282)
- 常用-笔记 (9)
- 2012-2013开发整理 (19)
- 2017前-开发整理 (38)
- 2017-开发整理【前端】 (2)
- 数据库 (25)
- 数据库_Oracle (35)
- 数据库_MySql (4)
- 数据库_Sybase (30)
- 数据库_Oracle ERP (4)
- java 应用 (23)
- java_xml解析 (7)
- java_反射 (0)
- Java_多线程 (0)
- java_socket (0)
- 前端_CSS样式 (3)
- 前端_JavaScript (29)
- 前端_jQuery 应用 (11)
- 前端_jQuery EasyUI (2)
- 开源_SSH框架应用 (18)
- 开源_spring (0)
- 开源_springMVC (0)
- 开源_MyBatis (0)
- 架构_01. SOA_webService (8)
- 架构_02. 搜索引擎_Solr (0)
- 架构_03. redis (0)
- 架构_04. mongodb (2)
- 架构_05. 设计模式 (0)
- 架构_06. 缓存机制 (0)
- 架构_07. 身份认证 (0)
- 架构_08. 单点登录 (0)
- 架构_09. JMS消息机制 (0)
- 架构_10. 工作流 (0)
- 架构_11. 日志 (1)
- 架构_12. 数据库-设计 (1)
- 架构_13.分布式架构 (1)
- web_C标签 (4)
- web中间件 (6)
- 综合技术 (4)
- 管理_maven (3)
- 管理_软件项目管理 (17)
- 思考_程序人生 (16)
- 资源_网站 (2)
- 其他 (1)
- Eclipse基本配置 (3)
- 2017-18 (8)
- Linux (1)
- 数字计算 (3)
- 微信开发 (0)
最新评论
-
masuweng:
JavaScript 动态表格增加、删除、行金额计算、合计 -
xxwozixin:
迷茫中在iteye上搜索“程序员的第一个五年规划”结果看到了这 ...
我的中兴五年生活
Dom4j也可以很方便完成XML文档的创建、元素的修改、文档的查询遍历等,但dom4j稍比jdom复杂一点,不过在大片文档的情况下dom4j的性能要不jdom好。
准备
首先,提供相关的jar包
Dom4j jar包下载:
http://sourceforge.net/projects/dom4j/files/dom4j-2.0.0-ALPHA-2/
jaxen jar下载:
http://repo1.maven.org/maven2/jaxen/jaxen/1.1.1/jaxen-1.1.1.jar
和dom4j依赖或相关的jar:
http://dom4j.sourceforge.net/dependencies.html
Junit-jar下载:
其次,准备测试案例的部分代码:
package com.hoo.test; import java.io.File; import java.util.Iterator; import java.util.List; import org.dom4j.Attribute; import org.dom4j.Document; import org.dom4j.DocumentException; import org.dom4j.DocumentHelper; import org.dom4j.Element; import org.dom4j.Node; import org.dom4j.QName; import org.dom4j.dom.DOMAttribute; import org.dom4j.io.SAXReader; import org.dom4j.tree.BaseElement; import org.junit.After; import org.junit.Before; import org.junit.Test; /** * <b>function:</b> 使用Dom4j操作XML * @author hoojo * @createDate 2011-8-5 下午06:15:40 * @file DocumentTest.java * @package com.hoo.test * @project Dom4jTest * @blog http://blog.csdn.net/IBM_hoojo * @email hoojo_@126.com * @version 1.0 */ public class DocumentTest { private SAXReader reader = null; @Before public void init() { reader = new SAXReader(); } @After public void destory() { reader = null; System.gc(); } public void fail(Object o) { if (o != null) System.out.println(o); } } # 创建一篇XML文档 文档格式如下: <?xml version="1.0" encoding="UTF-8"?> <catalog> <!--An XML Catalog--> <?target instruction?> <journal title="XML Zone" publisher="IBM developerWorks"> <article level="Intermediate" date="December-2001"> <title>Java configuration with XML Schema</title> <author> <firstname>Marcello</firstname> <lastname>Vitaletti</lastname> </author> </article> </journal> </catalog> 创建文档代码如下: /** * <b>function:</b>创建文档 * @author hoojo * @createDate 2011-8-5 下午06:18:18 */ @Test public void createDocument() { //创建一篇文档 Document doc = DocumentHelper.createDocument(); //添加一个元素 Element root = doc.addElement("catalog"); //为root元素添加注释 root.addComment("An XML Catalog"); //添加标记 root.addProcessingInstruction("target", "instruction"); //创建元素 Element journalEl = new BaseElement("journal"); //添加属性 journalEl.addAttribute("title", "XML Zone"); journalEl.addAttribute("publisher", "IBM developerWorks"); root.add(journalEl); //添加元素 Element articleEl = journalEl.addElement("article"); articleEl.addAttribute("level", "Intermediate"); articleEl.addAttribute("date", "December-2001"); Element titleEl = articleEl.addElement("title"); //设置文本内容 titleEl.setText("Java configuration with XML Schema"); //titleEl.addText("Java configuration with XML Schema"); Element authorEl = articleEl.addElement("author"); authorEl.addElement("firstname").setText("Marcello"); authorEl.addElement("lastname").addText("Vitaletti"); //可以使用 addDocType() 方法添加文档类型说明。 doc.addDocType("catalog", null,"file://c:/Dtds/catalog.dtd"); fail(doc.getRootElement().getName()); //将xml转换成文本 fail(doc.asXML()); //写入到文件 /*XMLWriter output; try { output = new XMLWriter(new FileWriter(new File("file/catalog.xml"))); output.write(doc); output.close(); } catch (IOException e) { e.printStackTrace(); }*/ }
* DocumentHelper是一个文档助手类(工具类),它可以完成文档、元素、文本、属性、注释、CDATA、 Namespace、XPath的创建,以及利用XPath完成文档的遍历和将文本转换成Document;
parseText完成将xml字符串转换成Doc的功能
Document doc = DocumentHelper.parseText("<root></root>");
createDocument创建一个文档
Document doc = DocumentHelper.createDocument();
如果带参数就会创建一个带有根元素的文档
createElement创建一个元素
Element el = DocumentHelper.createElement("el");
* Document的addElement方法可以给当前文档添加一个子元素
Element root = doc.addElement("catalog");
* addComment方法可以添加一段注释
root.addComment("An XML Catalog");
为root元素添加一段注释
* addProcessingInstruction添加一个标记
root.addProcessingInstruction("target", "instruction");
为root元素添加一个标记
* new BaseElement可以创建一个元素
Element journalEl = new BaseElement("journal");
* addAttribute添加属性
journalEl.addAttribute("title", "XML Zone");
* add添加一个元素
root.add(journalEl);
将journalEl元素添加到root元素中
* addElement添加一个元素,并返回当前元素
Element articleEl = journalEl.addElement("article");
给journalEl元素添加一个子元素article
* setText、addText可以设置元素的文本
authorEl.addElement("firstname").setText("Marcello"); authorEl.addElement("lastname").addText("Vitaletti");
* addDocType可以设置文档的DOCTYPE
doc.addDocType("catalog", null,file://c:/Dtds/catalog.dtd);
* asXML可以将文档或元素转换成一段xml字符串
doc.asXML(); root.asXML();
* XMLWriter类可以把文档写入到文件中
output = new XMLWriter(new FileWriter(new File("file/catalog.xml"))); output.write(doc); output.close();
# 修改XML文档内容
/** * <b>function:</b> 修改XML内容 * @author hoojo * @createDate 2011-8-9 下午03:37:04 */ @SuppressWarnings("unchecked") @Test public void modifyDoc() { try { Document doc = reader.read(new File("file/catalog.xml")); //修改属性内容 List list = doc.selectNodes("//article/@level"); Iterator<Attribute> iter = list.iterator(); while (iter.hasNext()) { Attribute attr = iter.next(); fail(attr.getName() + "#" + attr.getValue() + "#" + attr.getText()); if ("Intermediate".equals(attr.getValue())) { //修改属性值 attr.setValue("Introductory"); fail(attr.getName() + "#" + attr.getValue() + "#" + attr.getText()); } } list = doc.selectNodes("//article/@date"); iter = list.iterator(); while (iter.hasNext()) { Attribute attr = iter.next(); fail(attr.getName() + "#" + attr.getValue() + "#" + attr.getText()); if ("December-2001".equals(attr.getValue())) { //修改属性值 attr.setValue("December-2011"); fail(attr.getName() + "#" + attr.getValue() + "#" + attr.getText()); } } //修改节点内容 list = doc.selectNodes("//article"); Iterator<Element> it = list.iterator(); while (it.hasNext()) { Element el = it.next(); fail(el.getName() + "#" + el.getText() + "#" + el.getStringValue()); //修改title元素 Iterator<Element> elIter = el.elementIterator("title"); while(elIter.hasNext()) { Element titleEl = elIter.next(); fail(titleEl.getName() + "#" + titleEl.getText() + "#" + titleEl.getStringValue()); if ("Java configuration with XML Schema".equals(titleEl.getTextTrim())) { //修改元素文本值 titleEl.setText("Modify the Java configuration with XML Schema"); fail(titleEl.getName() + "#" + titleEl.getText() + "#" + titleEl.getStringValue()); } } } //修改节点子元素内容 list = doc.selectNodes("//article/author"); it = list.iterator(); while (it.hasNext()) { Element el = it.next(); fail(el.getName() + "#" + el.getText() + "#" + el.getStringValue()); List<Element> childs = el.elements(); for (Element e : childs) { fail(e.getName() + "#" + e.getText() + "#" + e.getStringValue()); if ("Marcello".equals(e.getTextTrim())) { e.setText("Ayesha"); } else if ("Vitaletti".equals(e.getTextTrim())) { e.setText("Malik"); } fail(e.getName() + "#" + e.getText() + "#" + e.getStringValue()); } } //写入到文件 /*XMLWriter output = new XMLWriter(new FileWriter(new File("file/catalog-modified.xml"))); output.write(doc); output.close();*/ } catch (DocumentException e) { e.printStackTrace(); } catch (Exception e) { e.printStackTrace(); } }
* reader.read(new File("file/catalog.xml"));读取指定xml文件内容到文档中;
* selectNodes是XPath的查询方法,完成xml文档的查询,传递xpath路径。其使用方法可以参考jdom的xpath的使用方法:
http://www.cnblogs.com/hoojo/archive/2011/08/11/2134638.html
* getName获取元素标签名称、getValue、getText获取值、文本内容;
* elementIterator("title");获取当前节点下所有的title元素,返回Iterator;
* elements获取下面所有的子元素,返回的是一个集合List;
# 显示文档相关信息
private String format(int i) { String temp = ""; while (i > 0) { temp += "--"; i--; } return temp; } /** * <b>function:</b>递归显示文档内容 * @author hoojo * @createDate 2011-8-9 下午03:43:45 * @param i * @param els */ private void print(int i, List<Element> els) { i++; for (Element el : els) { fail(format(i) + "##" + el.getName() + "#" + el.getTextTrim()); if (el.hasContent()) { print(i, el.elements()); } } } /** * <b>function:</b>显示文档相关信息 * @author hoojo * @createDate 2011-8-9 下午03:44:10 */ @Test public void printInfo() { try { Document doc = reader.read(new File("file/catalog.xml")); fail("asXML: " + doc.asXML()); fail(doc.asXPathResult(new BaseElement("article"))); List<Node> list = doc.content(); for (Node node : list) { fail("Node: " + node.getName() + "#" + node.getText() + "#" + node.getStringValue()); } fail("-----------------------------"); print(0, doc.getRootElement().elements()); fail("getDocType: " + doc.getDocType()); fail("getNodeTypeName: " + doc.getNodeTypeName()); fail("getPath: " + doc.getRootElement().getPath()); fail("getPath: " + doc.getRootElement().getPath(new BaseElement("journal"))); fail("getUniquePath: " + doc.getRootElement().getUniquePath()); fail("getXMLEncoding: " + doc.getXMLEncoding()); fail("hasContent: " + doc.hasContent()); fail("isReadOnly: " + doc.isReadOnly()); fail("nodeCount: " + doc.nodeCount()); fail("supportsParent: " + doc.supportsParent()); } catch (DocumentException e) { e.printStackTrace(); } fail("getEncoding: " + reader.getEncoding()); fail("isIgnoreComments: " + reader.isIgnoreComments()); fail("isMergeAdjacentText: " + reader.isMergeAdjacentText()); fail("isStringInternEnabled: " + reader.isStringInternEnabled()); fail("isStripWhitespaceText: " + reader.isStripWhitespaceText()); fail("isValidating: " + reader.isValidating()); }
# 删除文档内容
/** * <b>function:</b> 删除节点内容 * @author hoojo * @createDate 2011-8-9 下午03:47:44 */ @Test public void removeNode() { try { Document doc = reader.read(new File("file/catalog-modified.xml")); fail("comment: " + doc.selectSingleNode("//comment()")); //删除注释 doc.getRootElement().remove(doc.selectSingleNode("//comment()")); Element node = (Element) doc.selectSingleNode("//article"); //删除属性 node.remove(new DOMAttribute(QName.get("level"), "Introductory")); //删除元素 节点 node.remove(doc.selectSingleNode("//title")); //只能删除下一级节点,不能超过一级;(需要在父元素的节点上删除子元素) Node lastNameNode = node.selectSingleNode("//lastname"); lastNameNode.getParent().remove(lastNameNode); fail("Text: " + doc.selectObject("//*[text()='Ayesha']")); Element firstNameEl = (Element)doc.selectObject("//firstname"); fail("Text: " + firstNameEl.selectSingleNode("text()")); //删除text文本 //firstNameEl.remove(firstNameEl.selectSingleNode("text()")); //firstNameEl.remove(doc.selectSingleNode("//firstname/text()")); firstNameEl.remove(doc.selectSingleNode("//*[text()='Ayesha']/text()")); //删除子元素author //node.remove(node.selectSingleNode("//author")); fail(doc.asXML()); } catch (Exception e) { e.printStackTrace(); } }
* 删除注释
doc.getRootElement().remove(doc.selectSingleNode("//comment()"));
删除root元素下面的注释
* 删除属性
node.remove(new DOMAttribute(QName.get("level"), "Introductory"));
删除node节点中的名称为level,其值为Introductory的属性
* 删除元素
node.remove(doc.selectSingleNode("//title"));
删除node节点下的title元素
* 删除文本
firstNameEl.remove(firstNameEl.selectSingleNode("text()")); firstNameEl.remove(doc.selectSingleNode("//firstname/text()")); firstNameEl.remove(doc.selectSingleNode("//*[text()='Ayesha']/text()"));
删除firstNameEl的文本内容
发表评论
-
JDOM 操作XML(比较全)
2011-08-18 11:56 932可扩展标记语言——eXtensible Markup Lan ... -
dom4j读写XML及保存批量数据对象
2011-08-09 17:41 11811. 创建一个People对象 ... -
使用DOM4J来操作的XML文件(Tools)
2011-08-09 17:23 887使用DOM4J来操作的XML文件。 我们需要引入 ... -
使用 dom4j 解析 XML(转IBM)
2011-08-09 17:16 912dom4j API 包含一个解析 XML 文档的工 ... -
dom4j创建XML例子
2011-08-09 16:15 847dom4j创建XML(转载) package co ... -
xml笔记
2011-08-09 15:48 835XML笔记 一.Document对象相关 ...
相关推荐
DOM4j操作xml文件DOM4j操作xml文件DOM4j操作xml文件DOM4j操作xml文件DOM4j操作xml文件DOM4j操作xml文件DOM4j操作xml文件DOM4j操作xml文件
在这个示例中,我们将深入探讨如何利用Maven管理和DOM4j来操作XML文件。 首先,让我们了解一下Maven。Maven是Apache软件基金会的一个项目,它通过定义项目对象模型(Project Object Model,POM)来管理项目的构建、...
DOM4J通过创建一个对象模型来表示XML文档,使得我们可以像操作Java对象一样操作XML元素。 1. **XML解析**: - 使用`DocumentBuilderFactory`和`DocumentBuilder`类可以将XML字符串转换为`Document`对象,这是DOM4J...
### 使用dom4j操作XML详解 #### 一、DOM4j简介与配置 **DOM4j** 是一款专为Java平台设计的开源XML解析处理工具。它的设计充分考虑了性能和易用性,同时提供了对DOM、SAX及JAXP等标准的支持,因此非常适合进行复杂...
DOM4J的核心优势之一在于其丰富的接口体系,这些接口定义在`org.dom4j`包内,提供了对XML文档进行读写、查询、修改等操作的能力。 1. **Attribute**: 代表XML中的属性,可用于获取和设置属性值。 2. **Branch**: ...
DOM4J是Java环境中一个强大、灵活的XML处理库,它提供了XML的读取、写入、解析和操作的能力。本篇文章将深入探讨如何利用DOM4J库来实现XSD对XML文档的校验,以确保XML文件符合预先设定的数据结构规则。 首先,理解...
Dom4J作为一款优秀的Java XML API,以其简洁、高效的特点,在生成、解析和操作XML文档方面表现突出。本文将深入探讨如何使用Dom4J库来创建XML文档,包括初始化文档、添加元素、设置属性、插入文本以及最终保存文档至...
为了使用这个库,你需要将该jar包添加到项目的类路径中,然后就可以通过DOM4J提供的类和方法来解析和操作XML文件了。 总之,DOM4J是一个功能强大的XML处理库,无论是在小型项目还是大型系统中,都能发挥其优势,...
在本示例中,"dom4jExample.java"是一个Java程序,它展示了如何利用DOM4J库来操作XML文件。 首先,我们需要了解DOM4J的基本概念。DOM4J采用Document Object Model (DOM)接口,但它的实现比标准DOM更快,占用内存更...
它提供了简单且高效的API来读取、写入、修改以及操作XML。在这个实例中,我们将深入理解DOM4J库如何帮助我们处理XML文档,并通过实际操作来熟悉其核心功能。 XML(eXtensible Markup Language)是一种用于标记数据...
- XPath支持:可以方便地使用XPath表达式查找和操作XML元素。 - 轻量级:DOM4J不依赖大型库,适合各种项目。 - 性能良好:相比于传统的DOM API,DOM4J在内存占用和处理速度上有优势。 在实际开发中,DOM4J的强大...
- **dom4j+jaxen操作XML**:首先使用dom4j解析XML,然后通过jaxen创建XPath对象并执行查询。查询结果可以是元素、属性或其他XML节点,根据需要进行进一步处理。 例如,以下代码展示了如何使用dom4j和jaxen解析XML...
基于dom4j的读写xml文件的工具包。封装了dom4j操作xml文档的常和方法。 支持两种读写方法。1:针对小文件的读取整个文档,2:针对大文件的,逐行读取。读到几百M文件毫无压力。
相比W3C DOM API,dom4j的优势在于其内置的XPath支持,允许更方便地定位和操作XML文档中的节点。 **预先设置** 在使用dom4j之前,首先需要获取并配置dom4j库。dom4j的jar文件可以从其官方网站(http://dom4j.org)...
在提供的视频资源"17-dom4j解析xml文档(增删改查).avi"中,可能详细展示了这些操作的步骤和示例,观看该视频将进一步加深你对DOM4J操作XML的理解。记得实践是检验理论的最好方式,动手操作会让你更好地掌握这些知识...
DOM4J提供了几个核心类和接口来帮助我们操作XML文档: 1. **Document**: 表示整个XML文档。 2. **Element**: 表示XML文档中的元素。 3. **Attribute**: 表示元素的属性。 4. **Text**: 表示元素中的文本内容。 5. *...
首先,dom4j是一个强大的Java XML API,它提供了丰富的功能,如读取、写入、修改和操作XML文档。其核心概念是Element(元素)、Attribute(属性)和Document(文档)。通过这些对象,我们可以方便地处理XML文档的...
本教程将详细讲解如何使用DOM4J进行XML的增、删、改、查操作。 **一、XML的基本概念** XML(eXtensible Markup Language)是一种标记语言,用于描述数据结构,通常用于存储和传输数据。DOM(Document Object Model...
### DOM4j解析XML文件格式详解 ...通过以上介绍,我们了解到如何使用DOM4j进行XML文件的解析、操作和写入等基础工作。DOM4j不仅提供了强大的功能,而且使用起来也非常简便,非常适合处理复杂的XML数据。