| |
用JDom轻松整合Java和XML |
|
时间: 2004-02-13 来自:论坛 |
 |
|
你需要Jdom吗?
那么,你需要Jdom吗?这真是一个很好的问题。已经有了存在的标准,为什么还要去发明一个新的呢?答案是Jdom解决了现有的标准解决不了的问题。
DOM完全在内存中描述一个元素树。它是一个大的api,被设计操作几乎所有可能的XML任务。它也必须有相同的api去支持不同的语言。因为这些限制,对那些习惯使用java的特征,如方法重载、简单的set,get方法的java程序员来说,就很不习惯。DOM还需要大量的内存和较高的主频,这使它很难和许多轻量级的web应用一起工作。
SAX没有在内存中建立一个元素树,它用事情发展的方式来描述。例如:它报告每个读到的开始标记和结束标记。这种处理方式使它成为一个轻量级的快速读取的api。然而,这种事件处理方式对服务器端的java程序员来说不够直观。SAX也不支持修改XML文档和随机读取。
Jdom试图组合DOM和SAX的优点。它被设计成一个可以在小内存上快速执行轻量级api 。Jdom也支持随机读取整个文档,但是令人惊奇的是它并不需要把整个文档读到内存中。这个api支持未来的当需要时才读入信息的次轻量级操作。还有,Jdom通过标准的构造器和set方法支持XML文档的修改。
获取XML文档
Jdom用org.Jdom.Document类的一个实例来描述一个XML文档。这个文档类是一个轻重量级的,它可以包括文档类型、多处理指令的对象、一个根元素和注释对象。你可以不需要构造器而从草稿构造一个文档。
| 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数据源,但当请求的时候才对它解析。例如:文档的属性当不访问时是不需要解析的。
构造器仍在发展,可以通sql查询、ldap查询和其他的数据格式来够造Jdom文档。所以,一旦进到内存中,文档就和建造它的工具没有关系了。
SAXBuilder 和 DOMBuilder构造器允许用户指明他们是否应该轮换,以便确定哪个解析器时间执行解析的任务。
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所不支持的新的解析器。
|
|
|
|
|
|
|
|