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 />
|