RSS
热门关键字:
当前位置 : 主页>编程开发>java编程>入门>列表

用JDom轻松整合Java和XML

来源:我要研发网 作者: 时间:1970-01-01 点击:



  概述:

  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建立系统之间整合。

字串5

  Jdom原则 字串3

  第一条并且是最重要一条就是Jdomapi函数被设计成对java程序员来说是简单易懂。其他XML解析函数被设计成语言通用(支持相同api函数在java,c ,甚至是javascript中)。Jdom利用了java优秀特征,如:方法重载、回收机制,和后台处理等。

字串9

  为了能够简单易用,这些函数不得不以程序员喜欢形式来描绘XML文档。例如:程序员想一个元素文本内容是什么样子呢?

字串9

<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


字串8

  你需要Jdom吗?

字串7

  那么,你需要Jdom吗?这真是一个很问题。已经有了存在标准,为什么还要去发明一个新呢?答案是Jdom解决了现有标准解决不了问题。 字串3

  DOM完全在内存中描述一个元素树。它是一个大api,被设计操作几乎所有可能XML任务。它也必须有相同api去支持不同语言。因为这些限制,对那些习惯使用java特征,如方法重载、简单set,get方法java程序员来说,就很不习惯。DOM还需要大量内存和较高主频,这使它很难和许多轻量级web应用一起工作。

字串1

  SAX没有在内存中建立一个元素树,它用事情发展方式来描述。例如:它报告每个读到开始标记和结束标记。这种处理方式使它成为一个轻量级快速读取api。然而,这种事件处理方式对服务器端java程序员来说不够直观。SAX也不支持修改XML文档和随机读取。

字串5

  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路径中构造我们文档。

字串9

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树工具实现接口。

字串7

  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文件变大,所以我建议还是要缩进和另起一行,支持中文带换行和缩进格式如下:

字串9

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方面专家(嘿,不用灰心,你就是我们所要面向听众),一个文档类型声明看起来象下边样子:

字串1

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

  读取文档数据

字串6

  每一个XML文档必须有一个根元素。这个元素是访问所有XML文

最新评论共有 0 位网友发表了评论
发表评论
评论内容:不能超过250字,需审核,请自觉遵守互联网相关政策法规。
用户名: 密码:
匿名?
注册
相关文章