欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

(转)用jdom轻松整合java和xml 博客分类: XML相关 XMLJavaASP.netOracleASP 

程序员文章站 2024-03-18 11:04:34
...
用jdom轻松整合java和xml( 转贴)

jdom java
出处   http://www.javaworld.com/javaworld/jw-05-2000/jw-0518-jdom-p1.html

  
用jdom轻松整合java和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所不支持的新的解析器。

输出XML文档

你可以用几种不同的标准输出工具输出一个XML文档。org.jdom.output.XMLOutputter也许是最常用方法。它将xml文档写入一个特定的OutputStream.

SAXOutputter工具是另一个选择。它产生基于jdom xml文档的sax事件,你可以把这些送到等待这些sax事件的应用程序那里。相同的方式,DOMOutputter产生一个dom文档,这样你就可以把它送给可以接收dom文档的应用程序。输出xml文档的代码看起来象下边的样子:

XMLOutputter outputter = new XMLOutputter();
outputter.output(doc, System.out);

XMLOutputter用参数定制输出的格式。第一个参数是行缩进的格式;第二个参数是你是否想另起一行。因为机器到机器的原因,为了速度考虑你可以放弃行缩进和另起新行。

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)

下面是读入一个xml文档,并把它又输出的例子:

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();
        }
    }
}

====================
好文转载,以备后用。
该文章,还未详细消化,需要以后细看。