网络热词 > JDOM

JDOM

JDOM是一种使用 XML(标准通用标记语言下的一个子集) 的独特 Java 工具包,。它的设计包含 Java 语言的语法乃至语义。

JDOM是两位著名的 Java 开发人员兼作者,Brett Mclaughlin 和 Jason Hunter 的创作成果, 2000 年初在类似于Apache协议的许可下,JDOM作为一个开放源代码项目正式开始研发了。它已成长为包含来自广泛的 Java 开发人员的投稿、集中反馈及错误修复的系统,并致力于建立一个完整的基于 Java 平台的解决方案,通过 Java 代码来访问、操作并输出 XML 数据。

虽然许多Java 开发人员每天都在使用 XML,Sun 却在将 XML 整合进 Java 平台方面落后了。因为在 XML 成为从商家对商家集成到 Web 站点内容流水化等方面的关键技术之前,Java 2 平台就已经非常流行了。Sun已经使用JSR过程使之成为现存 XMLAPI的鼻祖,这一点已被广泛接受。目前最显著的是加入了JAXP(用于 XML语法分析的 Java API),其中包含了三个软件包:

org.w3c.dom ,W3C 推荐的用于 XML 标准规划文档对象模型的 Java 工具

org.xml.sax,用于对 XML 进行语法分析事件驱动的简单 API

javax.xml.parsers ,工厂化工具,允许应用程序开发人员获得并配置特殊的语法分析器工具 JDOM 能够替换org.w3c.dom软件包来有计划地操作 XML 文档

JDOM是一个开源项目,它基于树型结构,利用纯JAVA的技术对XML文档实现解析、生成、序列化以及多种操作。

JDOM 直接为JAVA编程服务。它利用更为强有力的JAVA语言的诸多特性(方法重载、集合概念以及映射),把SAX和DOM的功能有效地结合起来。

Jdom是用Java语言读、写、操作XML的新API函数。Jason Hunter 和 Brett McLaughlin公开发布了它的1.0版本。在直觉、简单和高效的前提下,这些API函数被最大限度的优化。在接下来的篇幅里将介绍怎么用Jdom去读写一个已经存在的XML文档。

在使用设计上尽可能地隐藏原来使用XML过程中的复杂性。利用JDOM处理XML文档将是一件轻松、简单的事。

JDOM在2000年的春天被Brett McLaughlin和Jason Hunter开发出来,以弥补DOM及SAX在实际应用当中的不足之处。

这些不足之处主要在于SAX没有文档修改、随机访问以及输出的功能,而对于DOM来说,JAVA程序员在使用时来用起来总觉得不太方便。

DOM的缺点主要是来自于由于Dom是一个接口定义语言(IDL),它的任务是在不同语言实现中的一个最低的通用标准,并不是为JAVA特别设计的。JDOM的最新版本为JDOM Beta 9。最近JDOM被收录到JSR-102内,这标志着JDOM成为了JAVA平台组成的一部分。

在 JDOM 中,XML 元素就是 Element 的实例,XML 属性就是 Attribute 的实例,XML 文档本身就是 Document 的实例。

因为 JDOM 对象就是像Document、Element 和 Attribute 这些类的直接实例,因此创建一个新 JDOM 对象就如在 Java 语言中使用 new 操作符一样容易。JDOM 的使用是直截了当的。

JDOM 使用标准的 Java 编码模式。只要有可能,它使用 Java new 操作符而不故弄玄虚使用复杂的工厂化模式,使对象操作即便对于初学用户也很方便。

JDOM是由以下几个包组成的

org.jdom包含了所有的xml文档要素的java类

org.jdom.adapters包含了与dom适配的java类

org.jdom.filter包含了xml文档的过滤器类

org.jdom.input包含了读取xml文档的类

org.jdom.output包含了写入xml文档的类

org.jdom.transform包含了将jdomxml文档接口转换为其他xml文档接口

org.jdom.xpath包含了对xml文档xpath操作的类

1、org.JDOM这个包里的类是你解析xml文件后所要用到的所有数据类型。

Attribute

CDATA

Coment

DocType

Document

Element

EntityRef

Namespace

ProscessingInstruction

Text

2、org.JDOM.transform在涉及xslt格式转换时应使用下面的2个类

JDOMSource

JDOMResult

org.JDOM.input

3、输入类,一般用于文档的创建工作

SAXBuilder

DOMBuilder

ResultSetBuilder

4、org.JDOM.output输出类,用于文档转换输出

XMLOutputter

SAXOutputter

DomOutputter

JTreeOutputter

使用前注意事项:

1.JDOM对于JAXP以及TRax的支持

JDOM支持JAXP1.1:你可以在程序中使用任何的parser工具类,默认情况下是JAXP的parser。

制定特别的parser可用如下形式

SAXBuilderparser

=newSAXBuilder("org.apache.crimson.parser.XMLReaderImpl");

Documentdoc=parser.build("str");

//workwiththedocument...

JDOM也支持TRaX:XSLT可通过JDOMSource以及JDOMResult类来转换(参见以后章节)

2.注意在JDOM里文档(Document)类由org.JDOM.Document来表示。这要与w3c中的Document区别开,这2种格式如何转换在后面会说明。

以下如无特指均指JDOM里的Document。

JDOM 不光可以很方便的建立XML文档,它的另一个用处是它能够读取并操作现有的 XML 数据。

JDOM的解析器在org.jdom.input.*这个包里,其中的DOMBuilder的功能是将DOM模型的Document解析成JDOM模型的Document;SAXBuilder的功能是从文件或流中解析出符合JDOM模型的XML树。由于我们经常要从一个文件里读取数据,因此我们应该采用后者作为解析工具。

解析一个xml文档,基本可以看成以下几个步骤:

1.实例化一个合适的解析器对象

本例中我们使用SAXBuilder:

SAXBuilder sb = new SAXBuilder();

2.以包含XML数据的文件为参数,构建一个文档对象myDocument

Document myDocument = sb.build(/some/directory/myFile.xml);

3.获到根元素

Element rootElement = myDocument.getRootElement();

一旦你获取了根元素,你就可以很方便地对它下面的子元素进行操作了,下面对Element对象的一些常用方法作一下简单说明:

getChild("childname") 返回指定名字的子节点,如果同一级有多个同名子节点,则只返回第一个;如果没有返回null值。

getChildren("childname") 返回指定名字的子节点List集合。这样你就可以遍历所有的同一级同名子节点。

getAttributeValue("name") 返回指定属性名字的值。如果没有该属性则返回null,有该属性但是值为空,则返回空字符串。

getChildText("childname") 返回指定子节点的内容文本值。

getText() 返回该元素的内容文本值。

还有其他没有罗列出来的方法,如果需要的话,可以随时查阅JDOM的在线文档,当然你可以在你需要的地方添加、删除元素操作,还记得上面的创建XML的方法吗?呵呵~~~

学习新东东还是从实例学起最为快捷,下面简单举个例子,就以上面的XML样本代码来学习JDOM的XML解析。本例中读取了样本XML文件里一些属性和content,最后我们还在contact元素里插入了一个新元素尽管我们实现了对于XML的基本操作,细心的朋友可能会

有疑问:如果XML文档的层次稍微复杂一些,如果嵌套多达几十上百层的话(开个玩笑),如果靠这样从根元素一级一级地通过getChild("childname")来访问子元素的话,将会非常痛苦!是的,的确是这样,但是我们有另一个有力的工具XPath,为什么不用呢?这是后话!先卖个关子(手敲累啦,下回吧,呵呵)。

/*

* Created on 2004-8-21

*

* TODO To change the template for this generated file go to

* Window - Preferences - Java - Code Style - Code Templates

*/

package com.cyberobject.study;

import org.jdom.Document;

import org.jdom.Element;

import org.jdom.input.SAXBuilder;

import org.jdom.output.Format;

import org.jdom.output.XMLOutputter;

/**

* @author kingwong

*

* TODO To change the template for this generated type comment go to

* Window - Preferences - Java - Code Style - Code Templates

*/

public class TestJDOM2 {

public static void main(String[] args){

SAXBuilder sb = new SAXBuilder();

try

{

Document doc = sb.build("myFile.xml");

Element root = doc.getRootElement();

String str1 = root.getAttributeValue("comment");

System.out.println("Root Element's comment attribute is : " + str1);

String str2 = root.getChild("sex").getAttributeValue("value");

System.out.println("sex Element's value attribute is : " + str2);

String str3 = root.getChildText("name");

System.out.println("name Element's content is :" + str3);

String str4 = root.getChild("contact").getChildText("telephone");

System.out.println("contact Element's telephone subelement content is : " + str4 + "\n");

Element inputElement = root.getChild("contact");

inputElement.addContent(new Element("email").setAttribute("value","wanghua @cyberobject .com"));

XMLOutputter xmlOut = new XMLOutputter(Format.getPrettyFormat());

String outStr = xmlOut.outputString(root);

System.out.println(outStr);

}

catch(Exception e)

{

e.printStackTrace();

}

}

}

(一)、XML文档创建

我们由零开始利用JDOM生成一个XML文档。最后的结果(样本文档)看起来象这样:

kingwong

87654321

All rights reserved Powered by 网络热词 87994.com

copyright ©right 2010-2020。
网络热词内容来自网络,如有侵犯请联系客服。zhit325@126.com