概述:
Jdom是用Java语言读、写、操作XML
新API函数。Jason Hunter 和 Brett McLaughlin公开发布了它
测试版本。在直觉、简单和高效
前提下,这些API函数被最大限度
优化。在接下来
篇幅里,Hunter 和 McLaughlin介绍怎么用Jdom去读写一个已经存在
XML文档。 字串7
Jdom是一个开源
api,它以直接易懂
方式向java程序员描述XML文档和文档
内容。就象名字揭示
那样,Jdom是为java优化
。为使用XML文档提供一个低消耗
方法。Jdom
使用者可以不必掌握太多
XML
知识就可以完成想要
操作。 字串3
Jdom可以和已有
XML技术如Simple API for XML (SAX)和 Document Object Model (DOM)相互协作.然而,它并不是简单
从这些api中提取出一些。Jdom从这些已存在
技术中吸收了
方面,自己建立了一套新
类和接口,用一个Jdom用户
话来说就是:“这些接口是我从一开始阅读org.w3c.dom就期待
”;Jdom可以读入SAX或是DOM
内容,也可以输出SAX或DOM可以接收
格式。这个能力可以使Jdom很
和已有
用SAX或DOM建立
系统之间整合。
Jdom
原则 字串3
第一条并且是最重要
一条就是Jdom
api函数被设计成对java程序员来说是简单易懂
。其他
XML解析函数被设计成语言通用
(支持相同
api函数在java,c ,甚至是javascript中)。Jdom利用了java
优秀
特征,如:方法重载、回收机制,和后台处理等。
为了能够简单易用,这些函数不得不以程序员喜欢
形式来描绘XML文档。例如:程序员想
到
一个元素
文本内容是什么样子
呢?
<element>This is my text content</element> 在一些api中,元素
文本内容仅被当作是一个元素
孩子节点。从技术角度来说,这个设计需要下面
代码才能访问到元素
内容:
字串4
String content = element.getFirstChild().getValue(); Jdom用一种更简单易用
方法来取得元素
内容: 字串2
String text = element.getText(); Jdom尽可能
减少程序员
工作量。依据拇指规则,Jdom应该用20%或是更少
努力来完成80%或是更多
java/xml方面
问题。这并不是说Jdom只是支持80%
XML规范(实际上我们希望Jdom100%
支持XML规范)。这个拇指规则是说有些东西可以加进去,但是没有必要。这些api函数应该保持简洁。
字串9
Jdom
第二条原则是说Jdom应该是快速
和轻量级
。调入和执行文档应该快速,内存
消耗应该尽量小。Jdom
设计明显是遵循这个原则。例如,就算在开始
时候,不太协调
操作已经比DOM快,但是比SAX显
粗糙。尽管这样,Jdom还是有许多SAX没有
优点。 字串6
你需要Jdom吗?
字串7
那么,你需要Jdom吗?这真是一个很
问题。已经有了存在
标准,为什么还要去发明一个新
呢?答案是Jdom解决了现有
标准解决不了
问题。 字串3
DOM完全在内存中描述一个元素树。它是一个大
api,被设计操作几乎所有可能
XML任务。它也必须有相同
api去支持不同
语言。因为这些限制,对那些习惯使用java
特征,如方法重载、简单
set,get方法
java程序员来说,就很不习惯。DOM还需要大量
内存和较高
主频,这使它很难和许多轻量级
web应用一起工作。
SAX没有在内存中建立一个元素树,它用事情发展
方式来描述。例如:它报告每个读到
开始标记和结束标记。这种处理方式使它成为一个轻量级
快速读取
api。然而,这种事件处理方式对服务器端
java程序员来说不够直观。SAX也不支持修改XML文档和随机读取。
Jdom试图组合DOM和SAX
优点。它被设计成一个可以在小内存上快速执行轻量级api 。Jdom也支持随机读取整个文档,但是令人惊奇
是它并不需要把整个文档读到内存中。这个api支持未来
当需要时才读入信息
次轻量级操作。还有,Jdom通过标准
构造器和set方法支持XML文档
修改。 字串5
获取XML文档 字串9
Jdom用org.Jdom.Document类
一个实例来描述一个XML文档。这个文档类是一个轻重量级
,它可以包括文档类型、多处理指令
对象、一个根元素和注释对象。你可以不需要构造器而从草稿构造一个文档。 字串6
Document doc = new Document(new Element("rootElement")); 本文后面我们会讨论从草稿构造一个XML文档是多么
容易。但是现在,我们从一个已存在
文件、一个流、或是一个URL路径中构造我们
文档。
SAXBuilder builder = new SAXBuilder();
Document doc = builder.build(url); 你可以用org.Jdom.input包中提供
构造类从任何数据源中构造文档。最近,有两种构造方式:SAXBuilder 和 DOMBuilder。SAXBuilder用sax解析器从文件中构造文档。SAXBuilder侦听sax事件并从内存中建立一个相应
文档。这种方式非常快(基本上和sax一样快),这也是我们推荐
方式。DOMBuilder是另一种可选
方式,它从一个存在
org.w3c.dom.Document对象中建立Jdom文档。它允许Jdom轻松
和构建DOM树
工具实现接口。
Jdom
速度有值得期待
提高
潜力通过一个延期
构造器
完成。这个构造器检查XML数据源,但当请求
时候才对它解析。例如:文档
属性当不访问时是不需要解析
。 字串5
字串6
构造器仍在发展,可以通sql查询、ldap查询和其他
数据格式来够造Jdom文档。所以,一旦进到内存中,文档就和建造它
工具没有关系了。 字串1
SAXBuilder 和 DOMBuilder构造器允许用户指明他们是否应该轮换,以便确定哪个解析器时间执行解析
任务。
字串8
public SAXBuilder(String parserClass, boolean validation);
public DOMBuilder(String adapterClass, boolean validation); 默认
是用apache
开源 Xerces解析器并且是关闭轮换
。你应该注到DOMBuilder不象一个解析类,倒更象一个适配类。这是因为不是所有
DOM解析器都是相同
api。为了仍让用户选择喜欢
解析器,Jdom使用一个对所有
dom解析器适用
公共
api
适配类。这个适配类支持所有流行
dom解析器,包括Apache
Xerces, Crimson,IBM
XML4J, Sun
Project X, 和Oracle
parsers V1 and V2.每一个解析器通过正确
调用别
解析器
方法执行标准
接口。这有点象jaxp,除了它支持jaxp所不支持
新
解析器。 字串1
输出XML文档
字串3
你可以用几种不同
标准输出工具输出一个XML文档。org.Jdom.output.XMLOutputter也许是最常用方法。它将xml文档写入一个特定
OutputStream. 字串3
SAXOutputter工具是另一个选择。它产生基于Jdom xml文档
sax事件,你可以把这些送到等待这些sax事件
应用程序那里。相同
方式,DOMOutputter产生一个dom文档,这样你就可以把它送给可以接收dom文档
应用程序。输出xml文档
代码看起来象下边
样子: 字串5
XMLOutputter outputter = new XMLOutputter();
outputter.output(doc, System.out); XMLOutputter用参数定制输出
格式。第一个参数是行缩进
格式;第二个参数是你是否想另起一行。因为机器到机器
原因,为了速度考虑你可以放弃行缩进和另起新行。
字串6
XMLOutputter outputter = new XMLOutputter("", false);
outputter.output(doc, System.out); (译注:这样
话自己看起来会很不
看,而且每一次重新写入
时候都会使这个xml文件变大,所以我建议还是要缩进和另起一行,支持中文
带换行和缩进
格式如下:
XMLOutputter outp = new XMLOutputter(“”,true,"GB2312");
outp.setTextTrim(true);
outp.output(doc, System.out); 可以参见以前我写
Jdom
文章http://www.csdn.net/Develop/read_article.asp?id=20720) 字串3
字串1
下面是读入一个xml文档,并把它又输出
例子: 字串5
import java.io.*;
import org.Jdom.*;
import org.Jdom.input.*;
import org.Jdom.output.*;
public class PrettyPrinter {
public static void main(String[] args) {
// Assume filename argument
String filename = args[0];
try {
// Build the document with SAX and Xerces, no validation
SAXBuilder builder = new SAXBuilder();
// Create the document
Document doc = builder.build(new File(filename));
// Output the document, use standard formatter
XMLOutputter fmt = new XMLOutputter();
fmt.output(doc, System.out);
} catch (Exception e) {
e.printStackTrace();
}
}
}读取文档类型 字串1
现在,让我们来看一下怎么读取文档
详细内容。许多XML文档都有
一个东西是文档类型,在Jdom中用DocType类来描述。万一你不是XML方面
专家(嘿,不用灰心,你就是我们所要面向
听众),一个文档类型
声明看起来象下边
样子:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> DOCTYPE后边
第一个词揭示文档被强制类型
名字,PUBLIC后边
词是文档类型
公共属性,最后一个词是文档类型
系统属性。文档属性可以上通过文档
getDocType()方法获得,DocType类提供了一组获得文档类型声明
方法。 字串5
DocType docType = doc.getDocType();
System.out.println("Element: " docType.getElementName());
System.out.println("Public ID: " docType.getPublicID());
System.out.println("System ID: " docType.getSystemID());读取文档数据
每一个XML文档必须有一个根元素。这个元素是访问所有XML文
![我要研发网[www.51dev.com]](/templets/images/toplogo.gif)
