您的位置:寻梦网首页编程乐园Java天地小龙亭之JSP实践之旅
小龙亭之JSP实践之旅
主页入门EJBJ2EE平台JSP编程译文工具JavaAppServerWeb数据库XML手记小亭

XML/JSP之旅

Hello,XML
XML&Java/JSP概述
JSP+XML技术纲要
JSP+XML构站实例-Sparks.com
Serving XML with JSP
XML经典问答
IBM的XML/Java教程
**教程 第1-3章
**教程 第4章
**教程 第5章
**教程 附录1 源程序
**教程 附录2 源程序
认识XML Server
Java与XML的平行世界
JDOM--XML的Java描述
Apache的XML项目
Cocoon的安装
XML DTD介绍
XML Schema入门
JSP与XML的联手
XML与Java的数据绑定

 

JDOM --DOM的Java 描述

1.JDOM概述 


JDOM是一种面向Java的读、写和操作XML文档的API。JDOM和现行的SAP和DOM标准兼容,为Java程序员通过一个简单、轻量的XML文档操作方法。需要指出的是,JDOM是专门为Java程序员开发的,所以采用许多Java语言的优秀特性,比如方法重载,集合(Collections,这是在Java2中出现的数据操作类型)和类映射(Reflection)。 
下面将举例说明JDOM是如何在Java程序中简化XML文档数据源的操作。现在以如何读取一个Element节点中的数据,节点的数据如下: 
从事JDOM的操作简练性 
在传统的XML处理API中,比如Xalan,读取节点的操作用按照如下方法: 
String content = element.getFirstChild().getValue(); 
而在JDOM中,您只需要下列更加简单和直接的方法即可: 
String content = element.getContent(); 
这样会减少程序员的工作量。事实上,JDOM的初始设计目的就是想用传统方法的20%甚至更少的代码完成80%的工作。但这并不意味着JDOM和XML规范只有80%的兼容,JDOM就是要完全兼容XML1.0的规范标准。 
JDOM的另外一个设计目标就是快速和轻量。在许多用户和程序员的一片抱怨声,Java似乎就是速度慢的代名词。应该承认的是,Java的虚拟机运行结构是造成Java程序运行速度比较慢的一个因素,所以我们在设计如何API时就应该考虑运行效率的问题。与其他操作XML文档数据源的API相比,您会发现JDOM在执行速度,效率和对内存的要求方面将会与众不同。 


2.有关于XML的背景知识 


DOM的全称是Document Object Model,文档对象模型,是W3C组织定义一种表示和组织XML数据源的标准。如果在Java程序中使用了DOM对象,在内存中将 
构造映射XML文档的树。所以在处理DOM对象对内存资源的要求就比较高。 
SAX的全称是Simpel API for XML,简化XML API。虽然SAX不是W3C推荐的标准,由于SAX在性能好,速度快,内存要求比较低,SAX已经成为任何一种XML处理API所要支持的接口。和DOM对象的处理方法不同,SAX不需要在内存中为XML数据源建立树型的结构映象,而是一种基于流式的操作方式,所以无论从速度上、资源要求上比较,都优于DOM操作方法。 
JDOM结合了DOM和SAX的优点,在内存资源的要求更少。同时,JDOM提供了一种可供随机访问的全文档视图,但却无需在内存中创建XML文档的映射。 


3.在JDOM中操作一个XML文档 


下面将介绍任何在JDOM中方便操作XML文档。 
3.1创建一个XML文档 
在XML的标准中表示一个XML文档实例的Document类。包org.jdom.input中提供了从多种数据源创建XML文档对象的构造类。JDOM提供了二种XML文档对象构造方法,SAXBuilder和DOMBuilder。SAXBuilder使用SAX语法解析器。基于以上的背景知识,SAXBuilder监听SAX事件,然后在内存中构件相应的XML数据Document对象实例;DOMBuilder的处理方式和SAXBuilder完全不同。需要指出的的是,JDOM即能从传统的文件、输入流、DOM对象中构造Document类实例,也能充SQL查询、LDAP请求和其他数据类型中好的Document类实例。所以JDOM的适应性将较其他的XML操作API更大。 
下面将举例说明任何用这二种构造器获得Document类实例: 
Document doc = new Document(new Element("rootElement")); 
SAXBuilder builder = new SAXBuilder(); 
Document doc = builder.build(url); 

3.2输出JDOM对象 
在介绍如何在JDOM中输出一个Document类对象到文件或者是其他的输出流之前,我想让您看看在传统的XML处理API中是如何实现的。 
public static void saveXML(Document doc, String filepath) { 
String encoding = new String("gb2312"); 
try { 
PrintWriter xmlout = new PrintWriter(new FileWriter(filepath)); 
XMLSerializer xl = new XMLSerializer(xmlout, new OutputFormat(doc, encoding, true)); 
xl.serialize(doc); 
//输出到一个文件中 
//xmlout.flush(); 
//xmlout.close(); 
//注意上面的操作被注释调的原因在于你不要操作。请记住!!! 

XMLSerializer xl1 = new XMLSerializer(System.out, new OutputFormat(doc, encoding, true)); 
xl1.serialize(doc); 
//输出打印到屏幕上 
} catch (Exception e) { 
System.out.print(e.toString()); 
} finally { 
try { 
(new FileWriter(filepath)).close(); 
} catch (IOException e) { 
(new File(filepath)).delete(); 



其实上的操作并不复杂。但你需要看看在JDOM中是如何操作的。 
import java.io.*; 
import org.jdom.*; 
import org.jdom.input.*; 
import org.jdom.output.*; 

public static void saveXML(String filepath) { 
try { 
//构造一个SAXBuilder对象实例 
SAXBuilder builder = new SAXBuilder(); 
//创建文档对象实例 
Document doc = builder.build(new File(filepath)); 

//用标准的输出方法输出一个文档 
XMLOutputter fmt = new XMLOutputter(); 
fmt.output(doc, System.out); 
} catch (Exception e) { 
e.printStackTrace(); 


比较完代码后,你发现用JDOM的操作方法会更加简单。 

上面是一些基本和非常简单的JDOM操作方法。 

_____________________________________________________________

<来源 www.dukejava.com!dukejava />

<日期 2001/01/15 />