`
heimuad
  • 浏览: 296910 次
  • 性别: Icon_minigender_1
  • 来自: 南京
社区版块
存档分类
最新评论

JDOM使用 zz

    博客分类:
  • Java
阅读更多
JDOM 使用标准的 Java 编码模式。只要有可能,它使用 Java new 操作符而不故弄玄虚使用复杂的工厂化模式,使对象操作即便对于初学用户也很方便。
本文分两步对JDOM的应用加以介绍:XML创建和XML解析

一、XML文档创建
   我们由零开始利用JDOM生成一个XML文档。最后的结果(样本文档)看起来象这样:
<?xml version="1.0" encoding="UTF-8"?>
<MyInfo comment="introduce myself">
  <name>kingwong</name>
  <sex value="male"/>
  <contact>
    <telephone>87654321</telephone>
  </contact>
</MyInfo>

1.以 MyInfo 为根元素创建文档
  Element rootElement = new Element("MyInfo");
   //所有的XML元素都是 Element 的实例。根元素也不例外
Document myDocument = new Document(rootElement);   //以根元素作为参数创建Document对象。
   一个Document只有一个根,即root元素。

2.给根元素添加属性
  Attribute rootAttri = new Attribute("comment","introduce myself");//创建名为 commnet,值为 introduce myself 的属性。
  rootElement.setAttribute(rootAttri);//将刚创建的属性添加到根元素。
  这两行代码你也可以合成一行来写,象这样:
  rootElement.setAttribute(new Attribute("comment","introduce myself"));
或者
  rootElement.setAttribute("comment","introduce myself");

3.添加元素和子元素
  JDOM里子元素是作为 content(内容)添加到父元素里面去的,所谓content就是类似上面样本文档中<name></name>之间的东东,即kingwong。罗嗦了点是吧:)
  Element nameElement = new Element("name");//创建 name 元素
  nameElement.addContent("kingwong");//将kingwong作为content添加到name元素
  rootElement.addContent(nameElement);//将name元素作为content添加到根元素

这三行你也可以合为一句,象这样:
  rootElement.addContent((Content)(new Element("name").addContent("kingwong")));
因为addContent(Content child)方法返回的是一个Parent接口,而Element类同时继承了Content类和实现了Parent接口,所以我们把它造型成Content。

我们用同样的方法添加带属性的子元素<sex value="male"/>
  rootElement.addContent(new Element("sex").setAttribute("value","male"));

同样的,我们添加<contract />元素到根元素下,用法上一样,只是稍微复杂了一些:
rootElement.addContent((Content)(new Element("contact").addContent((Content)(new Element("telephone").addContent("87654321")))));
如果你对这种简写形式还不太习惯,你完全可以分步来做,就象本节刚开始的时候一样。事实上如果层次比较多,写成分步的形式更清晰些,也不容易出错。

4.删除子元素
这个操作比较简单:
rootElement.removeChild("sex");//该方法返回一个布尔值

  到目前为止,我们学习了一下JDOM文档生成操作。上面建立了一个样本文档,可是我们怎么知道对不对呢?因此需要输出来看一下。我们将JDOM生成的文档输出到控制台,使用 JDOM 的 XMLOutputter 类。
5. 将 JDOM 转化为 XML 文本
XMLOutputter xmlOut = new XMLOutputter(" ",true);
try {
    xmlOut.output(myDocument,System.out);
} catch (IOException e) {
    e.printStackTrace();
}
XMLOutputter 有几个格式选项。这里我们已指定希望子元素从父元素缩进两个空格,并且希望元素间有空行。

  new XMLOutputter(java.lang.String indent, boolean newlines)这个方法在最新版本中已经不建议使用。JDOM有一个专门的用来定义格式化输出的类:org.jdom.output.Format,如果你没有特殊的要求,有时候使用里面的几个静态方法(应该可以说是预定义格式)如 getPrettyFormat()就可以了。我们把上面的输出格式稍微改一下,就象这样:

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

6.将JDOM文档转化为其他形式
XMLOutputter 还可输出到 Writer 或 OutputStream。为了输出JDOM文档到一个文本文件,我们可以这样做:
FileWriter writer = new FileWriter("/some/directory/myFile.xml");
outputter.output(myDocument, writer);
writer.close();

XMLOutputter 还可输出到字符串,以便程序后面进行再处理:
Strng outString = xmlOut.outputString(myDocument);

当然,在输出的时候你不一定要输出所有的整个文档,你可以选择元素进行输出:
xmlOut.output(rootElement.getChild("name"),System.out);
一句话,JDOM非常灵活方便!如果你想进一步研究JDOM,请到官方网站去看一看: http://www.jdom.org

本节示例源码:
package com.cyberobject.study;

import java.io.IOException;

import org.jdom.Attribute;
import org.jdom.Content;
import org.jdom.Document;
import org.jdom.Element;
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 TestJDOM {

public static void main(String[] args)
{
Element rootElement = new Element("MyInfo");
Document myDocument = new Document(rootElement);

// Attribute rootAttri = new Attribute("comment","introduce myself");
// rootElement.setAttribute(rootAttri);

rootElement.setAttribute("comment","introduce myself");
//rootElement.setAttribute(new Attribute("comment","introduce myself"));
// Element sexElement = new Element("sex");
// rootElement.addContent(sexElement);

// Element nameElement = new Element("name");
// nameElement.addContent("kingwong");
// rootElement.addContent(nameElement);

rootElement.addContent((Content)(new Element("name").addContent("kingwong")));
rootElement.addContent(new Element("sex").setAttribute("value","male"));
rootElement.addContent((Content)(new Element("contract").addContent((Content)(new Element("telephone").addContent("87654321")))));

rootElement.removeChild("sex");

XMLOutputter xmlOut = new XMLOutputter(Format.getPrettyFormat());
try {
  xmlOut.output(myDocument,System.out);
  //xmlOut.output(rootElement.getChild("name"),System.out);
  //String outString = xmlOut.outputString(myDocument);
} catch (IOException e) {
   e.printStackTrace();
}
}
}


二、XML文档解析
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的在线文档:http://www.jdom.org/docs/apidocs/index.html。当然你可以在你需要的地方添加、删除元素操作,还记得上面的创建XML的方法吗?呵呵~~~

  学习新东东还是从实例学起最为快捷,下面简单举个例子,就以上面的XML样本代码来学习JDOM的XML解析。本例中读取了样本XML文件里一些属性和content,最后我们还在contact元素里插入了一个新元素<email value="wanghua@cyberobject.com" />。尽管我们实现了对于XML的基本操作,细心的朋友可能会 有疑问:如果XML文档的层次稍微复杂一些,如果嵌套多达几十上百层的话(开个玩笑),如果靠这样从根元素一级一级地通过getChild("childname")来访问子元素的话,将会非常痛苦!是的,的确是这样,但是我们有另一个有力的工具XPath,为什么不用呢?这是后话!先卖个关子(手敲累啦,下回吧,呵呵)。
分享到:
评论

相关推荐

    java开发教程Jdom使用教程

    使用JDOM时,需要注意以下几点: - JDOM支持JAXP 1.1,可以使用任何解析器,可以通过指定解析器类名来改变默认行为。 - JDOM也支持TRaX的XSLT转换。 - `Document`类在JDOM中的表示与W3C DOM的`Document`不同,两者...

    JDOM使用详解XML及实例

    ### 四、JDOM使用方法 1. **Document类操作**: - 创建新的Document对象:`Document doc = new Document(new Element("root"));` - 修改Document内容:`root.setText("Hello JDOM!");` 2. **解析XML**: - 使用...

    JDOM使用详解及实例

    JDOM 是一个专门为Java设计的XML处理库,它结合了SAX和DOM的优点,提供了一种高效且易于使用的API来创建、解析和操作XML文档。JDOM的主要目标是简化XML处理,通过利用Java语言的强大特性,如方法重载、集合和映射,...

    jdom介绍及使用指南

    ### JDOM介绍及使用指南 #### 一、JDOM包概览 JDOM是一个轻量级的Java XML API,它提供了简洁的API用于处理XML文档。JDOM的主要优点在于其简单性和易于使用性,适用于那些希望避免DOM的复杂性和SAX的事件驱动模型...

    JDOM使用详解及实例(解析xml

    在使用JDOM时,要区分JDOM的`Document`类与`org.w3c.dom.Document`,两者并不相同,但可以通过适配器进行转换。 总之,JDOM为Java开发者提供了一个简洁、高效的XML处理工具,它通过减少XML处理的复杂性,使开发者...

    JDOM使用详解及实例(解析xml).pdf

    本篇文档《JDOM使用详解及实例(解析xml).pdf》将对JDOM的使用方法进行详细介绍,并提供实例来指导用户如何解析XML。 首先,JDOM提供了一种基于对象的XML表示方式。与DOM(文档对象模型)不同,JDOM不需要将XML文档...

    JDOM帮助文档以及使用教程

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

    JDOM 介绍及使用指南

    JDOM是一个开源项目,它基于树型结构,利用纯JAVA的技术对XML文档实现解析、生成、序列化以及多种操作。 JDOM 直接为JAVA编程服务。它利用更为强有力的JAVA语言的诸多特性(方法重载、集合概念以及映射),把SAX和...

    JDOM 介绍及使用

    ### JDOM介绍与使用 #### 一、JDOM概述 JDOM是一个专为Java编程语言设计的开源项目,用于解析、生成、序列化XML文档。它由Brett McLaughlin和Jason Hunter在2000年创建,旨在解决DOM和SAX在实际应用中的局限性。...

    使用JDOM解析XML文件

    本篇文章将深入探讨如何使用JDOM解析XML文件。 首先,我们需要理解JDOM的基本结构。JDOM通过Document对象表示整个XML文档,Element代表XML元素,Attribute表示元素属性,Text表示元素内的文本内容。这些类构成了...

    jdom 下载 jdom 下载

    在本文中,我们将深入探讨JDOM的基本概念、功能、安装与下载,以及如何在Java项目中使用JDOM。 **1. JDOM简介** JDOM是由Jason Hunter和Brett McLaughlin发起的一个开源项目,旨在为Java开发者提供一个高效、便捷的...

    jdom的两种版本jar包集合

    JDOM的主要目标是为Java开发者提供一个高性能、灵活且易于使用的XML处理工具,使得XML数据能够与Java对象无缝结合。 **JDOM的两个版本** 在您提供的资源中,包含了JDOM的两个主要版本:jdom-1.1.3.jar和jdom-2.0.6...

    JDOM(java)使用详解及实例

    2、org.JDOM.transform在涉及xslt格式转换时应使用下面的2个类 JDOMSource JDOMResult org.JDOM.input 3、输入类,一般用于文档的创建工作 SAXBuilder DOMBuilder ResultSetBuilder org.JDOM.output 4、...

    jdom源码+jdom.jar

    JDOM的主要优点在于其完全使用Java语言实现,因此与Java平台高度集成,能够充分利用Java的特性。 JDOM.jar是JDOM库的二进制版本,包含了JDOM的所有类和接口,使得开发者可以在项目中直接引用这个jar文件,从而在...

    jdom-1.1.2&jdom帮助文档

    5. **Builder(构建器)**:JDOM 使用 Builder 类来解析 XML 文档并创建相应的 DOM 树。有 SAXBuilder 和 DOMBuilder 两种,分别基于 SAX 和 DOM 解析器。 **JDOM 的主要功能** 1. **解析 XML**:JDOM 提供了多种...

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

    通过导入这个jar包,开发者可以在他们的项目中直接使用JDOM的功能,如读取XML文件、创建新的XML结构、修改现有XML内容以及遍历XML树形结构。 随着技术的发展,JDOM随后发布了1.1版本,带来了性能优化和新功能。`...

    jdom中文使用

    5. **JDOM与JAXP和TRaX的兼容**:JDOM支持JAXP 1.1,可以使用任何解析器,并且与XSLT转换框架TRaX兼容。 6. **Document类**:`Document`类是JDOM的核心,代表整个XML文档。创建`Document`对象可以通过直接创建`...

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

    `jdom-b3-docs.zip`可能包含JDOM的API文档,这对于理解和使用库中的各种类和方法至关重要。开发者可以通过查看这些文档来了解如何正确地使用JDOM进行XML操作。 总的来说,JDOM是一个强大的XML处理工具,它为Java...

    java org.jdom 包下载

    1. **jdom-2.0.5-javadoc.jar**:这是JDOM的API文档,开发者可以通过查看这个JAR文件中的文档来了解每个类和方法的详细信息,这对于学习和使用JDOM非常有帮助。 2. **jdom-2.0.5-sources.jar**:包含了JDOM库的源...

    Jdom教程 Jdom教程.pdf

    ### JDOM教程知识点详解 #### 一、JDOM简介 ...通过上述知识点的学习,我们可以了解到JDOM的基本使用方法,包括创建XML文档、解析XML文档以及使用XPath进行查询等功能。这对于开发者来说是非常有价值的工具。

Global site tag (gtag.js) - Google Analytics