- 浏览: 348118 次
- 性别:
- 来自: 北京
文章分类
最新评论
-
pacoson:
感谢楼主。请受小生一拜。
ANT预编译JSP -
zhuhongming123:
一楼的同学Lucene4.* 以上的 已经改成了Numeric ...
Lucene日期排序及组合查询 -
ywjk520:
RangeQuery在哪个包里?
Lucene日期排序及组合查询 -
willwen:
有个疑问,楼主,为何初始化bits 从txt读取已有的网址是直 ...
布隆过滤器(Bloom Filter)之java实例 -
yu_226528:
还不如没有呢
jFreeChart 在jsp页上实现简单的折线图、柱状图
最近的工作常常要和XML格式的文档或字符串打交道,发现用JDOM来做真是方便。可以实现XML应用程序的快速开发。
在 JDOM 中,XML 元素就是 Element 的实例,XML 属性就是 Attribute 的实例,XML 文档本身就是 Document 的实例。
因为 JDOM 对象就是像 Document、Element 和 Attribute 这些类的直接实例,因此创建一个新 JDOM 对象就如在 Java 语言中使用 new 操作符一样容易。JDOM 的使用是直截了当的。
JDOM 使用标准的 Java 编码模式。只要有可能,它使用 Java new 操作符而不故弄玄虚使用复杂的工厂化模式,使对象操作即便对于初学用户也很方便。
本文分两步对JDOM的应用加以介绍:XML创建 和 XML解析
一、XML文档创建
我们由零开始利用JDOM生成一个XML文档。最后的结果(样本文档)看起来象这样:
<?xml version="1.0" encoding="UTF-8"?>
<MyInfo comment="introduce myself">
<name>kingwong</name>
<sex value="male"/>
<contact>
<telephone>87654321</telephone>
</contact>
</MyInfo>
1.以 MyInfo 为根元素创建文档
Element rootElement = new Element("MyInfo");//所有的XML元素都是 Element 的实例。根元素也不例外:)
Document myDocument = new Document(rootElement);//以根元素作为参数创建Document对象。一个Document只有一个根,即root元素。
2.给根元素添加属性
Attribute rootAttri = new Attribute("comment","introduce myself");//创建名为 commnet,值为 introduce myself 的属性。
rootElement.setAttribute(rootAttri);//将刚创建的属性添加到根元素。
这两行代码你也可以合成一行来写,象这样:
rootElement.setAttribute(new Attribute("comment","introduce myself"));
或者
rootElement.setAttribute("comment","introduce myself");
3.添加元素和子元素
JDOM里子元素是作为 content(内容)添加到父元素里面去的,所谓content就是类似上面样本文档中<name></name>之间的东东,即kingwong。罗嗦了点是吧:)
Element nameElement = new Element("name");//创建 name 元素
nameElement.addContent("kingwong");//将kingwong作为content添加到name元素
rootElement.addContent(nameElement);//将name元素作为content添加到根元素
这三行你也可以合为一句,象这样:
rootElement.addContent((Content)(new Element("name").addContent("kingwong")));//因为addContent(Content child)方法返回的是一个Parent接口,而Element类同时继承了Content类和实现了Parent接口,所以我们把它造型成Content。
我们用同样的方法添加带属性的子元素<sex value="male"/>
rootElement.addContent(new Element("sex").setAttribute("value","male"));//注意这里不需要转型,因为addAttribute(String name,String value)返回值就是一个 Element。
同样的,我们添加<contract />元素到根元素下,用法上一样,只是稍微复杂了一些:
rootElement.addContent((Content)(new Element("contact").addContent((Content)(new Element("telephone").addContent("87654321")))));
如果你对这种简写形式还不太习惯,你完全可以分步来做,就象本节刚开始的时候一样。事实上如果层次比较多,写成分步的形式更清晰些,也不容易出错。
4.删除子元素
这个操作比较简单:
rootElement.removeChild("sex");//该方法返回一个布尔值
到目前为止,我们学习了一下JDOM文档生成操作。上面建立了一个样本文档,可是我们怎么知道对不对呢?因此需要输出来看一下。我们将JDOM生成的文档输出到控制台,使用 JDOM 的 XMLOutputter 类。
5. 将 JDOM 转化为 XML 文本
XMLOutputter xmlOut = new XMLOutputter(" ",true);
try {
xmlOut.output(myDocument,System.out);
} catch (IOException e) {
e.printStackTrace();
}
XMLOutputter 有几个格式选项。这里我们已指定希望子元素从父元素缩进两个空格,并且希望元素间有空行。
new XMLOutputter(java.lang.String indent, boolean newlines)这个方法在最新版本中已经不建议使用。JDOM有一个专门的用来定义格式化输出的类:org.jdom.output.Format,如果你没有特殊的要求,有时候使用里面的几个静态方法(应该可以说是预定义格式)如 getPrettyFormat()就可以了。我们把上面的输出格式稍微改一下,就象这样:
XMLOutputter xmlOut = new XMLOutputter(Format.getPrettyFormat());
6.将JDOM文档转化为其他形式
XMLOutputter 还可输出到 Writer 或 OutputStream。为了输出JDOM文档到一个文本文件,我们可以这样做:
FileWriter writer = new FileWriter("/some/directory/myFile.xml");
outputter.output(myDocument, writer);
writer.close();
XMLOutputter 还可输出到字符串,以便程序后面进行再处理:
Strng outString = xmlOut.outputString(myDocument);
当然,在输出的时候你不一定要输出所有的整个文档,你可以选择元素进行输出:
xmlOut.output(rootElement.getChild("name"),System.out);
一句话,JDOM非常灵活方便!如果你想进一步研究JDOM,请到官方网站去看一看:http://www.jdom.org
本节示例源码:
package com.cyberobject.study; import java.io.IOException; import org.jdom.Attribute; import org.jdom.Content; import org.jdom.Document; import org.jdom.Element; import org.jdom.output.Format; import org.jdom.output.XMLOutputter; /** * @author kingwong * * TODO To change the template for this generated type comment go to * Window - Preferences - Java - Code Style - Code Templates */ public class TestJDOM { public static void main(String[] args) { Element rootElement = new Element("MyInfo"); Document myDocument = new Document(rootElement); // Attribute rootAttri = new Attribute("comment","introduce myself"); // rootElement.setAttribute(rootAttri); rootElement.setAttribute("comment","introduce myself"); //rootElement.setAttribute(new Attribute("comment","introduce myself")); // Element sexElement = new Element("sex"); // rootElement.addContent(sexElement); // Element nameElement = new Element("name"); // nameElement.addContent("kingwong"); // rootElement.addContent(nameElement); rootElement.addContent((Content)(new Element("name").addContent("kingwong"))); rootElement.addContent(new Element("sex").setAttribute("value","male")); rootElement.addContent((Content)(new Element("contract").addContent((Content)(new Element("telephone").addContent("87654321"))))); rootElement.removeChild("sex"); XMLOutputter xmlOut = new XMLOutputter(Format.getPrettyFormat()); try { xmlOut.output(myDocument,System.out); //xmlOut.output(rootElement.getChild("name"),System.out); //String outString = xmlOut.outputString(myDocument); } catch (IOException e) { e.printStackTrace(); } } }
二、XML文档解析
JDOM 不光可以很方便的建立XML文档,它的另一个用处是它能够读取并操作现有的 XML 数据。
JDOM的解析器在org.jdom.input.*这个包里,其中的DOMBuilder的功能是将DOM模型的Document解析成JDOM模型的Document;SAXBuilder的功能是从文件或流中解析出符合JDOM模型的XML树。由于我们经常要从一个文件里读取数据,因此我们应该采用后者作为解析工具。
解析一个xml文档,基本可以看成以下几个步骤:
1.实例化一个合适的解析器对象
本例中我们使用SAXBuilder:
SAXBuilder sb = new SAXBuilder();
2.以包含XML数据的文件为参数,构建一个文档对象myDocument
Document myDocument = sb.build(/some/directory/myFile.xml);
3.获到根元素
Element rootElement = myDocument.getRootElement();
一旦你获取了根元素,你就可以很方便地对它下面的子元素进行操作了,下面对Element对象的一些常用方法作一下简单说明:
getChild("childname") 返回指定名字的子节点,如果同一级有多个同名子节点,则只返回第一个;如果没有返回null值。
getChildren("childname") 返回指定名字的子节点List集合。这样你就可以遍历所有的同一级同名子节点。
getAttributeValue("name") 返回指定属性名字的值。如果没有该属性则返回null,有该属性但是值为空,则返回空字符串。
getChildText("childname") 返回指定子节点的内容文本值。
getText() 返回该元素的内容文本值。
还有其他没有罗列出来的方法,如果需要的话,可以随时查阅JDOM的在线文档:http://www.jdom.org/docs/apidocs/index.html。当然你可以在你需要的地方添加、删除元素操作,还记得上面的创建XML的方法吗?呵呵~~~
学习新东东还是从实例学起最为快捷,下面简单举个例子,就以上面的XML样本代码来学习JDOM的XML解析。本例中读取了样本XML文件里一些属性和content,最后我们还在contact元素里插入了一个新元素<email value="wanghua@cyberobject.com" />。尽管我们实现了对于XML的基本操作,细心的朋友可能会
有疑问:如果XML文档的层次稍微复杂一些,如果嵌套多达几十上百层的话(开个玩笑),如果靠这样从根元素一级一级地通过getChild("childname")来访问子元素的话,将会非常痛苦!是的,的确是这样,但是我们有另一个有力的工具XPath,为什么不用呢?这是后话!先卖个关子(手敲累啦,下回吧,呵呵)。
/* * Created on 2004-8-21 * * TODO To change the template for this generated file go to * Window - Preferences - Java - Code Style - Code Templates */ package com.cyberobject.study; import org.jdom.Document; import org.jdom.Element; import org.jdom.input.SAXBuilder; import org.jdom.output.Format; import org.jdom.output.XMLOutputter; /** * @author kingwong * * TODO To change the template for this generated type comment go to * Window - Preferences - Java - Code Style - Code Templates */ public class TestJDOM2 { public static void main(String[] args){ SAXBuilder sb = new SAXBuilder(); try { Document doc = sb.build("myFile.xml"); Element root = doc.getRootElement(); String str1 = root.getAttributeValue("comment"); System.out.println("Root Element's comment attribute is : " + str1); String str2 = root.getChild("sex").getAttributeValue("value"); System.out.println("sex Element's value attribute is : " + str2); String str3 = root.getChildText("name"); System.out.println("name Element's content is :" + str3); String str4 = root.getChild("contact").getChildText("telephone"); System.out.println("contact Element's telephone subelement content is : " + str4 + "\n"); Element inputElement = root.getChild("contact"); inputElement.addContent(new Element("email").setAttribute("value","wanghua@cyberobject.com")); XMLOutputter xmlOut = new XMLOutputter(Format.getPrettyFormat()); String outStr = xmlOut.outputString(root); System.out.println(outStr); } catch(Exception e) { e.printStackTrace(); } } }
发表评论
-
HttpClient 学习整理
2010-12-02 14:05 796一般的情况下我们都是使用IE或者Navigator浏览器来访问 ... -
Log4j配置详解
2010-11-19 15:36 9441.Log4j日志管理系统简 ... -
C++和JNI的数据转换(3)
2010-09-29 14:58 954Java 测试native代码这没有什么多说的,看代码吧 ... -
C++和JNI的数据转换(2)
2010-09-29 14:49 1072全部的C/C++方法实现代码如下: /**//*** ... -
C++和JNI的数据转换(1)
2010-09-29 14:42 1811<script type="text/java ... -
ANT预编译JSP
2010-09-07 22:27 2551<?xml version="1.0" ... -
java操作Excel(jxl)
2010-08-05 09:27 1123package test;import jxl.*; ... -
什么是Jetty
2010-05-21 17:03 1050Jetty 是一个开源的servlet ... -
使用jetty作为嵌入式web容器(部署war文件)
2010-05-21 16:58 1258由于工作的需要,仓促的摸了一把jetty,觉得jetty在作为 ... -
一段分页代码PaginationSupport.java
2010-05-01 16:37 1299package com.iteye.common.hibern ... -
response.sendRedirect() 的session丢失问题
2010-04-29 10:42 2895使用时response.sendRedirect(),如果 ... -
EHCACHE简介
2010-04-25 19:37 979二级缓存 EHCache是一个 ... -
jFreeChart 在jsp页上实现简单的折线图、柱状图
2010-02-08 14:22 3643创建柱状图 1 引入jFreech ... -
用dom4j实现openfire式导航菜单
2010-01-06 22:26 1638借鉴Openfire项目中 ... -
Jxl简析(二)
2009-11-30 18:31 1051(二)应用 在进行实践前,我们需要对excel ... -
Jxl简析(一)
2009-11-30 18:28 1184最近,完成了一个网上报表系统,刚巧用到了一个JAVA操作exc ... -
Java实现异库多表多字段的同时导入导出
2009-11-28 16:59 1726最近公司做的项目中要求把项目实施单位的原有系统中的表导入到我们 ... -
JavaMail API详解
2009-11-26 16:12 890版权声明:本文可以自由转载,转载时请务必以超链接形式标明文 ... -
FCKeditor 2.6.3与FCKeditor.java 2.4在JSP中配置
2009-11-26 16:08 24291.FCKeditor 介绍 FCKeditor 这个开 ... -
IE6中奇偶中文参数乱码的问题
2009-11-14 12:55 2763form是以post方式传递的,pager-taglib中接受 ...
相关推荐
本篇主要介绍XML解析的基础知识,特别是针对JDOM库的使用,一个Java平台上的XML处理库。 JDOM是Java Document Object Model的缩写,它是为了解决DOM(Document Object Model)在Java中的性能问题而设计的。JDOM提供...
3. **无接口设计**:JDOM 中主要使用的是具体类而非接口,这使得代码更简洁,使用起来更加直观。 **获取与安装 JDOM:** 要在项目中使用 JDOM,首先需要从官方网站(http://jdom.org)下载相应的 JAR 包,例如 JDOM...
本文将详细介绍四种主流的Java XML处理库:DOM4J、DOM、JDOM和SAX,并通过简单的代码示例帮助初学者入门。 1. DOM (Document Object Model) DOM是W3C制定的一种标准,它将XML文档视为一个树形结构,允许开发者通过...
本压缩包提供的是Hibernate入门所需的jar包,包括了Hibernate的核心库以及与之配合使用的相关组件。让我们深入探讨一下这些jar包以及它们在Hibernate中的作用。 1. Hibernate核心库: - `hibernate-core.jar`:这...
XML(eXtensible Markup Language)是一种用于存储和传输数据的标记语言,广泛应用于软件开发、数据交换等领域。...提供的入门项目可以作为学习和实践这些解析技术的良好起点,通过实际操作加深对XML处理的理解。
### XML入门教程精要 #### 1. XML简介与背景 **XML**(eXtensible Markup Language)是一种可扩展标记语言,由W3C联盟发展维护。与HTML不同,XML是一种元语言,允许用户自定义标签,从而描述数据本身及其结构。XML的...
本文将深入探讨XML的入门知识,包括XML的解析与创建,以及通过不同方式操作XML文件的方法。 首先,让我们理解XML的基本结构。XML文档由元素构成,每个元素都有开始标签和结束标签,例如`内容</element>`。元素可以...
此外,JDOM和DOM4J是Java中常见的DOM实现库,可能会出现在案例中。 7. **XML在Web服务中的应用**:在SOAP(Simple Object Access Protocol) Web服务中,XML用于封装请求和响应消息。源码可能包含使用Java的JAX-WS...
本入门案例将带你了解如何使用Ehcache实现分布式缓存,并特别关注如何将文件数据转换为树形结构。 首先,让我们理解Ehcache的基本概念。Ehcache的核心组件包括缓存管理器(Cache Manager)、缓存(Cache)和缓存项...
DOM4J是一款强大的Java XML API,它提供了丰富的DOM、SAX、JDOM等接口,使得处理XML文档变得更为便捷。在本文中,我们将深入探讨DOM4J的基础用法,帮助初学者快速入门。 **1. 安装与引入** 在开始使用DOM4J之前,...
例如,使用Java的org.w3c.dom包中的DocumentBuilder类可以创建和解析DOM树。 2. SAX解析器: SAX(Simple API for XML)是一种事件驱动的解析方式,它不需要一次性加载整个文档,而是逐行读取,遇到元素、属性等...
8. **DOM4J和JDOM**:在Java开发中,DOM4J和JDOM是常用的XML处理库,提供了方便的API进行XML解析、操作和生成。 9. **XML与JSON**:虽然XML功能强大,但JSON因其简洁性和易用性在现代Web应用中更为流行。两者各有...
3. **SAXBuilder**:在一些第三方库中,如Jakarta POI或JDOM,提供了更方便的SAX解析工具,如JDOM的SAXBuilder。它简化了SAX解析的过程,允许开发者直接从XML输入源构建一个JDOM文档对象模型。 除了SAX解析,你提到...
例如,Java的JAXB(Java Architecture for XML Binding)用于对象和XML之间的绑定,DOM4J、JDOM是流行的DOM解析库。Python的ElementTree库提供了简洁的XML处理方式。 七、XML在大数据与云计算中的应用 在大数据处理...
### ant入门教材(经典) #### 一、Ant简介 **Ant**是一款开源的构建工具,类似于传统的`make`工具,但具有更多的优势和特点。它最初由Apache Jakarta项目开发,并且完全采用Java语言编写,因此可以在任何安装了...
### 无废话XML:XML入门知识点详解 #### 一、XML简介 XML(Extensible Markup Language,可扩展标记语言)是一种用于标记数据的语言,它的设计目的是传输和存储数据。与HTML相似,XML同样使用标签来定义文档结构,...
8. **与JAXB和JDOM的比较**:dom4j相比JAXB(Java Architecture for XML Binding)和JDOM,提供了更丰富的API和功能,同时在某些场景下性能更优,但JAXB和JDOM在特定任务上(如Java对象和XML之间的自动绑定)可能更...
9. **DOM和JDOM**:在Java编程中,DOM4J和JDOM是常用的XML处理库,它们提供了操作XML文档的API,简化了XML的解析和生成。 10. **XML与数据库**:XML也可以作为数据库中的数据格式,如XML数据库,提供了一种非结构化...
dom4j 目录的介绍: 1)docs 是文档目录 2)如何查 Dom4j 的文档 3)Dom4j 快速入门 2)lib 目录 ...第三方的解析: jdom 在 dom 基础上进行了封装、 dom4j 又对 jdom 进行了封装。 pull 主要用在 And