`
心动音符
  • 浏览: 337021 次
  • 性别: Icon_minigender_2
  • 来自: 北京
社区版块
存档分类
最新评论

Jdom简明教程

阅读更多
Jdom简明教程
 
一、JDOM 简介

JDOM是一个开源项目,它基于树型结构,利用纯JAVA的技术对XML文档实现解析、生成、序列化以及多种操作。JDOM 直接为JAVA编程服务。它利用更为强有力的JAVA语言的诸多特性(方法重载、集合概念以及映射),把SAX和DOM的功能有效地结合起来。在使用设计上尽可能地隐藏原来使用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 包概览

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       包含了将jdom xml文档接口转换为其他xml文档接口

org.jdom.xpath           包含了对xml文档xpath操作的类三、JDOM 类说明



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

Attribute

CDATA

Coment

DocType

Document

Element

EntityRef

Namespace

ProscessingInstruction

Text

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

JDOMSource

JDOMResult

org.JDOM.input



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

SAXBuilder

DOMBuilder

ResultSetBuilder

org.JDOM.output



2.4、输出类,用于文档转换输出

XMLOutputter

SAXOutputter

DomOutputter

JTreeOutputter



2.5、使用前注意事项:

2.5.1、JDOM对于JAXP 以及 TRax 的支持

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

制定特别的parser可用如下形式
SAXBuilder parser  =  new SAXBuilder("org.apache.crimson.parser.XMLReaderImpl");

Document doc = parser.build("http://www.cafeconleche.org/"); // work with the document...

 


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



2.5.2、注意在JDOM里文档(Document)类由org.JDOM.Document 来表示。

这要与org.w3c.dom中的Document区别开,这2种格式如何转换在后面会说明。以下如无特指均指JDOM里的Document。



三、JDOM主要使用方法



3.1.Ducument类

(1)Document的操作方法:

Element root = new Element("GREETING");

Document doc = new Document(root);

root.setText("Hello JDOM!");

 

或者简单的使用Document doc = new Document(new Element("GREETING").setText("Hello JDOM!t"));

这点和DOM不同。Dom则需要更为复杂的代码,如下:
DocumentBuilderFactory factory  = DocumentBuilderFactory.newInstance();

DocumentBuilder builder  = factory.newDocumentBuilder();

Document doc  =  builder.newDocument();/* 产生元素和文本对象 */

Element root  = doc.createElement("root");

Text text  =  doc.createText("This is the root");

 

root.appendChild(text);

doc.appendChild(root);

 

注意事项:JDOM不允许同一个节点同时被2个或多个文档相关联,要在第2个文档中使用原来老文档中的节点的话。首先需要使用detach()把这个节点分开来。



(2)从文件、流、系统ID、URL得到Document对象:
DOMBuilder builder = new DOMBuilder();

Document doc = builder.build(new File("jdom_test.xml"));

 

SAXBuilder builder = new SAXBuilder();

Document doc = builder.build(url);


在新版本中DOMBuilder 已经Deprecated掉 DOMBuilder.builder(url),用SAX效率会比较快。



这里举一个小例子,为了简单起见,使用String对象直接作为xml数据源:
 public jdomTest() {

    String textXml = null;

    textXml = "<note>";

    textXml = textXml +

        "<to>aaa</to><from>bbb</from><heading>ccc</heading><body>ddd</body>";

<note>

       textXml

       <to>aaa</to>

       <from>bbb</from>

       <heading>ccc</heading>

       <body>ddd</body>

</note>
 

    textXml = textXml + "</note>";

    

SAXBuilder builder = new SAXBuilder();

    Document doc = null;

    Reader in= new StringReader(textXml);

    try {

      doc = builder.build(in);

      Element root = doc.getRootElement();

//注意此处取出的是root节点下面的一层的Element集合

      List ls = root.getChildren();

      for (Iterator iter = ls.iterator(); iter.hasNext(); ) {

        Element el = (Element) iter.next();

        if(el.getName().equals("to")){

         System.out.println(el.getText());

        }

      }

    }

    catch (IOException ex) {

      ex.printStackTrace();

    }

    catch (JDOMException ex) {

      ex.printStackTrace();

    }

 }


(3)DOM的document和JDOM的Document之间的相互转换使用方法,简单!
/* domDocument -> jdomDocument */

DOMBuilder builder = new DOMBuilder();

org.jdom.Document jdomDocument = builder.build(domDocument);

 

/* jdomDocument -> domDocument */

DOMOutputter converter = new DOMOutputter();

org.w3c.dom.Document domDocument = converter.output(jdomDocument);


3.2.XML文档输出



XMLOutPutter类:

JDOM的输出非常灵活,支持很多种io格式以及风格的输出
Document doc = new Document(...);

XMLOutputter outp = new XMLOutputter();

 

outp.output(doc, fileOutputStream); // Raw output

outp.setTextTrim(true); // Compressed output

outp.output(doc, socket.getOutputStream());

outp.setIndent(" ");// Pretty output 

outp.setNewlines(true);

outp.output(doc, System.out);


详细请参阅最新的JDOM API手册



3.3.Element 类:



(1)浏览Element树
Element root = doc.getRootElement();//获得根元素element

List allChildren = root.getChildren();// 获得所有子元素的一个list

List namedChildren = root.getChildren("name");// 获得指定名称子元素的list

Element child = root.getChild("name");//获得指定名称的第一个子元素

注: getChildren()返回元素的List ; getChild()直接返回该元素.



JDOM给了我们很多很灵活的使用方法来管理子元素(这里的List是java.util.List)
List allChildren = root.getChildren();

allChildren.remove(3); // 删除第四个子元素

 

allChildren.removeAll(root.getChildren("jack"));// 删除叫“jack”的子元素

root.removeChildren("jack"); // 便捷写法

 

allChildren.add(new Element("jane"));// 加入

root.addContent(new Element("jane")); // 便捷写法

 

allChildren.add(0, new Element("first"));

 

(2)移动Elements:

在JDOM里很简单
Element movable = new Element("movable");

parent1.addContent(movable); // place

parent1.removeContent(movable); // remove

parent2.addContent(movable); // add

 

在Dom里
Element movable = doc1.createElement("movable");

parent1.appendChild(movable); // place

parent1.removeChild(movable); // remove

parent2.appendChild(movable); // 出错!


补充:纠错性



JDOM的Element构造函数(以及它的其他函数)会检查element是否合法。而它的add/remove方法会检查树结构,检查内容如下:

1.在任何树中是否有回环节点

2.是否只有一个根节点

3.是否有一致的命名空间(Namespaces)



(3)Element的text内容读取
<description>

A cool demo

</description>

 

// The text is directly available, Returns "\n A cool demo\n"

String desc = element.getText();

 

// There's a convenient shortcut,Returns "A cool demo"

String desc = element.getTextTrim();

 

(4)Elment内容修改
element.setText("A new description");

 

(5)可正确解释特殊字符
element.setText("<xml> content");

 

(6)CDATA的数据写入、读出
element.addContent(new CDATA("<xml> content"));

String noDifference = element.getText();

 

混合内容

element可能包含很多种内容,比如说
<table>

<!-- Some comment -->

Some text

<tr>Some child element</tr>

</table>

 

取table的子元素tr
String text = table.getTextTrim();

Element tr = table.getChild("tr");


也可使用另外一个比较简单的方法
List mixedCo = table.getContent();

Iterator itr = mixedCo.iterator();

while (itr.hasNext()) {

Object o = i.next();

// 这里可以写成Comment, Element, Text, CDATA,ProcessingInstruction, 或者是EntityRef的类型

if (o instanceof Comment) {...}

}



// 现在移除Comment,注意这里游标应为1。这是由于回车键也被解析成Text类的缘故,所以Comment项应为1。

mixedCo.remove(1);



3.4.Attribute类

<table width="100%" border="0"> </table>

String width = table.getAttributeValue("width");//获得attribute

int border = table.getAttribute("width").getIntValue();

table.setAttribute("vspace", "0");//设置attribute

table.removeAttribute("vspace");// 删除一个或全部attribute

table.getAttributes().clear();



3.5.处理指令(Processing Instructions)操作

一个Pls的例子

<?br?>

<?cocoon-process type="xslt"?>

          |        |

          |        |

        目标     数据

处理目标名称(Target)

String target = pi.getTarget();

获得所有数据(data),在目标(target)以后的所有数据都会被返回。

String data = pi.getData();

String type = pi.getValue("type");获得指定属性的数据

List ls = pi.getNames();获得所有属性的名称



3.6.命名空间操作

<xhtml:html xmlns:xhtml="http://www.w3.org/1999/xhtml">

<xhtml:title>Home Page</xhtml:title>

</xhtml:html>

Namespace xhtml = Namespace.getNamespace("xhtml", "http://www.w3.org/1999/xhtml");

List kids = html.getChildren("title", xhtml);

Element kid = html.getChild("title", xhtml);

kid.addContent(new Element("table", xhtml));



3.7.XSLT格式转换

使用以下函数可对XSLT转换.最后如果你需要使用w3c的Document则需要转换一下。
public static Document transform(String stylesheet,Document in)

                                        throws JDOMException {

     try {

       Transformer transformer = TransformerFactory.newInstance()

                             .newTransformer(new StreamSource(stylesheet));

       JDOMResult out = new JDOMResult();

       transformer.transform(new JDOMSource(in), out);

       return out.getDeocument();

     } catch (TransformerException e) {

       throw new JDOMException("XSLT Trandformation failed", e);

     }

   }
分享到:
评论

相关推荐

    java开发教程Jdom使用教程

    Java开发中的JDOM是一个专门针对XML处理的开源库,它以Java为中心,提供了一种简洁、高效的API来解析、创建、修改和序列化XML文档。JDOM的设计目标是结合SAX和DOM的优点,同时减少它们的不足,使得XML处理更加直观和...

    Jdom教程 Jdom教程.pdf

    ### JDOM教程知识点详解 #### 一、JDOM简介 JDOM(Java Document Object Model)是一种用于处理XML文档的Java库。与SAX和DOM API相比,JDOM提供了更为简洁和直观的方式来创建、读取、修改和输出XML文档。本教程主要...

    jdom详解教程

    **JDOM详解教程** JDOM,全称Java Document Object Model,是一种专为Java设计的XML处理库。它提供了一种高效、便捷的方式来创建、修改和处理XML文档。本教程将逐步介绍JDOM的使用,包括其核心类、常用方法以及实际...

    jdom教程+实例(含源代码)

    **JDOM教程与实例解析** **一、JDOM简介** JDOM,全称为Java Document Object Model,是一个针对XML文档的Java API。它提供了一种在Java环境中创建、修改和处理XML文档的方式。JDOM的核心思想是用纯Java对象来表示...

    jdom教程

    **JDOM教程** JDOM,全称为Java Document Object Model,是一个专门为Java设计的XML处理库。它提供了一种高效、方便的方式来创建、修改和处理XML文档。本教程将深入探讨JDOM的核心概念、使用方法以及如何通过JDOM来...

    JDOM帮助文档以及使用教程

    **JDOM详解与使用教程** **一、JDOM概述** JDOM,全称为Java Document Object Model,是一个专门针对Java设计的XML处理库。它提供了一种高效、方便的方式来创建、读取、修改和保存XML文档。JDOM的目标是简化XML在...

    jdom教程详解

    ### jdom教程详解 #### 一、JDOM简介与应用场景 JDOM(Java Document Object Model)是一种用于处理XML文档的Java库。它提供了一种简单直观的方式来解析、修改和创建XML文档,使得开发者能够轻松地操作XML数据。...

    jdom 下载 jdom 下载

    JDOM,全称为Java Document Object Model,是一种专为Java设计的XML处理库。它提供了一种在Java应用程序中创建、修改和操作XML文档的方法。在本文中,我们将深入探讨JDOM的基本概念、功能、安装与下载,以及如何在...

    jdom-1.1.zip_java jdom_jdom-1.0.jar包_jdom-1.1_jdom-1.1.1.tar.gz

    在`www.pudn.com.txt`文件中,可能包含了一些关于这些JDOM版本的下载信息、教程链接或者使用示例,对于初学者来说是一个很好的参考资料。 总的来说,JDOM作为Java平台上的XML处理库,提供了简单而直接的API,使得...

    jdom的两种版本jar包集合

    **JDOM概述** JDOM(Java Document Object Model)是一个用于处理XML文档的Java库,它提供了在内存中构建和操作XML文档的API。JDOM的主要目标是为Java开发者提供一个高性能、灵活且易于使用的XML处理工具,使得XML...

    jdom源码+jdom.jar

    JDOM,全称为Java Document Object Model,是一种专为Java设计的XML处理库。它提供了一种高效、方便的方式来创建、构建、修改和读取XML文档。JDOM的主要优点在于其完全使用Java语言实现,因此与Java平台高度集成,...

    jdom-1.1.2&jdom帮助文档

    压缩包中的 `jdom.chm` 文件是 JDOM 的官方帮助文档,包含了详细的 API 参考、教程和示例。对于开发者来说,这是了解和学习 JDOM 的重要资源。文档详细解释了每个类、接口和方法的用法,帮助开发者快速上手。 总结...

    jdom-1.1.zip jdom-1.1.jar jdom.jar jdom库 jdom操作xml

    JDOM,全称为Java Document Object Model,是一种专为Java设计的XML处理库。它提供了一种高效、方便的方式来创建、修改和操作XML文档。在Java应用程序中,JDOM扮演着核心角色,允许开发者以面向对象的方式处理XML...

    java org.jdom 包下载

    Java中的JDOM(Java Document Object Model)是一个用于处理XML文档的库,它提供了一种方便的方式来创建、修改和操作XML数据。JDOM是完全用Java编写的,因此它与Java平台紧密集成,提供了高效且灵活的API来处理XML...

    jdom.rar内含多个jdom包

    3. **帮助文档**:这可能包括API文档、用户指南或者教程,它们详细解释了JDOM的各种类和方法,以及如何有效地使用这些工具。对于初学者来说,这是一份非常宝贵的资源,可以帮助他们理解JDOM的工作原理和最佳实践。 ...

    JDOM1.1(Jdom文档)

    **JDOM1.1:构建XML文档的强大工具** 在IT领域,XML(eXtensible Markup Language)是一种用于存储和传输数据的标记语言,广泛应用于数据交换、配置文件和Web服务。为了方便处理XML文档,Java社区开发了JDOM,一个...

    jdom 读取XML 文件

    JDOM是Java中一个用于处理XML文档的库,它提供了一种高效且方便的方式来创建、读取、修改XML文件。本篇文章将深入探讨如何使用JDOM来读取XML文件。 首先,我们需要了解JDOM的基本概念。JDOM通过构建一棵DOM...

    Android代码-jdom

    Introduction to the JDOM project Please see the JDOM web site at http://jdom.org/ and GitHub repository at https://github.com/hunterhacker/jdom/ Quick-Start for JDOM See the github wiki for a Primer ...

    jdom - 2.0.1

    **JDOM 2.0.1 知识详解** JDOM 是一个专为 Java 平台设计的 XML 处理库,它提供了高效且便捷的方式来处理 XML 文档。JDOM 在 XML 开发领域中占据了一席之地,尤其在需要与 Java 代码紧密集成时,其优势更为明显。...

    jdom-1.0,jdom解析xml

    **JDOM解析XML详解** XML(Extensible Markup Language)是一种用于标记数据的标准化语言,广泛应用于数据交换、配置文件和Web服务等领域。JDOM是Java领域中专门处理XML的一个库,它提供了一种高效且方便的方式来...

Global site tag (gtag.js) - Google Analytics