`
JAVA天地
  • 浏览: 674085 次
  • 性别: Icon_minigender_1
  • 来自: 太原
文章分类
社区版块
存档分类
最新评论

如何用JDom读取XML文档

阅读更多
原贴地址:http://blog.csdn.net/liumm1983/archive/2007/04/05/1552493.aspx
简介:Jdom是用Java语言读、写、操作XML的新API函数。Jason Hunter 和 Brett McLaughlin公开发布了它的1.0版本。在直觉、简单和高效的前提下,这些API函数被最大限度的优化。在接下来的篇幅里将介绍怎么用Jdom去 读写一个已经存在的XML文档。
关键词:Java、JDOM、XML
java+xml=Jdom!
这就是Jdom设计者的目 标。如果你曾经是用过烦人的SAX或Dom来处理xml,你就会知道为什么要有JDOM.在2002的javaOne会议上JDOM的主要创始人 jason Hunter有一篇精彩的演讲介绍了JDom技术,土模就是jdom makes xml easy.
我们知道dom是用于与平台和语言无关的方式表示xml文档的官方W3C标准,利用dom和sax api可以解析和处理 xml文档。这里我们介绍的jdom是基于树操作的纯java api,应该说他提供的是一套用于解析、创建、出来和实现xml的解决方案。
二、环境配置
在我的WINDOWS xp系统平台上采用jdk-1_5_0_06作为开发和测试平台。
三、获得与安装JDOM
由于目前JDOM并没有包含在SUN的JDK中(我想不久的将来JDOM必然会成为SUN JDK的一部分),我们必须手工下载与设置JDOM的环境。
http://www.jdom.org可 以下载JDOM的最新版本。这里下载的是jdom-1.0。JDOM的jar文件就是build目录下的文件jdom.jar,将上述文件拷贝到jdk- 1_5_0_06目录下的jre/lib/ext目录下,而用eclipse的用户可以手动添加到user liberary


Jdom模型:
每个元素都有四个关键段:

1、名称
2、元素属性
3、元素范围名字空间
4、元素内容

用JDOM处理现有XML文档的大致过程如下:
1、 用简单无变元构造函数构造一个org.jdom.input.SAXBuilder对象。SAXBuilder用sax解析器从文件中构造文档。 SAXBuilder侦听sax事件并从内存中建立一个相应的文档。这种方式非常快(基本上和sax一样快),Jdom的速度有值得期待的提高的潜力通过 一个延期的构造器的完成。这个构造器检查XML数据源,但当请求的时候才对它解析。例如:文档的属性当不访问时是不需要解析的.构造器仍在发展,可以通 sql查询、ldap查询和其他的数据格式来够造Jdom文档。所以,一旦进到内存中,文档就和建造它的工具没有关系了。
2、用建立器的build()方法从Reader,InputStream,URL,File或包含系统ID的字符串建立Document对象。
3、如果读取文档遇到问题,则抛出IOException,如果建立文档遇到问题,则抛出JDOMException。
4、否则用Document类,Element类和其他JDOM类的方法在文档中建立导航。

导航JDOM树
每个Element对象包含一列子元素:Comment,ProcessingInstruction,Text和其他Element对象。此外,属性和其他名字空间还有单独的列表。
分 析文档和建立Document对象之后,可能要通过搜索来选择其中程序感兴趣的部分。在JDOM中,大多数导航通过Element类的方法进行。每个 Element的完整子元素(包括了子元素的所有内容,包括说明、处理指令、文本节点和元素,要进行深度搜索,就要对当前元素的子元素应用 getContent()方法,通常要采用递归)在getContent()方法返回java.util.List中提供。getChildren()方 法返回的java.util.List中只有每个Element的子元素。
JDOM的处理方式有些类似于DOM,但它主要是用SAX实现的,你不必担心处理速度和内存的问题。另外,JDOM中几乎没有接口,的类全部是实实在在的类,没有类工厂类的。其最重要的一个包org.jdom中主要有以下类:
Document(文档节点)
每个Document对象包括下列三个属性:
1、根Element
2、表示文档类型声明的DocType对象
3、包含根元素和任何处理指令与说明的List,按文档顺序出现
Attribute(属性节点)
Public Element setAttributes (List attributes)Throws IllegalAddException
Public List getAttributes()
setAttribute()
getAttribute()
getAttributeValue()
attribute.getName()
attribute.getValue()

CDATA (CDATA段节点)
Comment(说明节点)
XML文件的说明:<!-- wire configuration -->
DocType (文档类型节点)
Element(元素节点)
元素名设置和获取
Public Element setName(String name) throws IllegalNameException
Public String getName()

Public String get(int i) //i>=0


Content(内容节点)
Public Element setContent(List list) throws IllegalAddException;
public List getContent();
addContent();
removeContent();

EntityRef(实例节点)
Namespace(名字空间节点)
ProcessingInstruction(处理指令节点)

Text(文本节点)
getText();
setText(String s);

example.xml文件

<?xml version="1.0" encoding="GBK"?>
<bookList>
<book>
<name>Java编程入门</name>
<author>张三</author>
<publishDate>2002-6-6</publishDate>
<price>35.0</price>
</book>
<book>
<name>XML在Java中的应用</name>
<author>李四</author>
<publishDate>2002-9-16</publishDate>
<price>92.0</price>
</book>
</bookList>

cute.xml文件

<?xml version="1.0" encoding="gb2312"?>
<bookList> //RootElement
<book hot="true"> //<childelement name="value">---->Attribute
<name>Java编程入门</name> //<element>This is my text content</element>
<author>cute</author>
<publishDate>2002-6-6</publishDate>
<price>50.0</price>
</book>
<book>
<name>XML在Java中的应用</name>
<author>李四</author>
<publishDate>2002-9-16</publishDate>
<price>92.0</price>
</book>
</bookList>

数据输入要用到XML文档要通过org.jdom.input包,反过来需要org.jdom.output。如前面所说,关是看API文档就能够使用。
我们的例子读入XML文件example.xml,加入一条处理指令,修改第一本书的价格和作者,并添加一条属性,然后写入文件cute.xml

cute.java:

package jdom;

import org.jdom.*;
import org.jdom.input.*;
import org.jdom.output.*;
import java.io.*;
import java.util.*;

public class Cute {

public static void main(String args[]) {
try {
/*
* 用无变元构造函数构造一个SAXBuilder对象, 用sax解析器从文件中构造文档,
* SAXBuilder侦听sax事件并从内存中建立一个相应的文档
*/
SAXBuilder sb = new SAXBuilder();
// 创建文档
Document doc = sb.build(new FileInputStream("example.xml"));
// 加入一条处理指令
ProcessingInstruction pi = new ProcessingInstruction(
"xml-stylesheet",
"href=\"bookList.html.xsl\" type=\"text/xsl\"");
// 把这条处理指令,加入文档中
doc.addContent(pi);
// 获得这个文档的根元素
Element root = doc.getRootElement();
java.util.List ls = root.getChildren();
// 获得这个根元素的所有子元素(不包含子元素的子元素),却完全忽略其内容 Iterator i = ls.iterator();

while (i.hasNext()) {
Object o = i.next();
if (o instanceof Text)/*使用instanceof 来获得所需要的内容*/
{Text t=(Text)o;
System.out.println("Text: " + t.getText());}
else if(o instanceof Attribute)
System.out.println("Attribute: " + o);
else if (o instanceof Element)
System.out.println("Element: " + ((Element) o).getName());
}

// 得到第一个子元素的子元素,却完全忽略其内容
Element book = (Element) ls.get(0);
// 给这个子元素添加一条属性,
Attribute attr = new Attribute("hot", "true");
book.setAttribute(attr);
// 获得这个元素的子元素(指定)以及其值
Element el2 = book.getChild("author");
// 输出这个元素的值
System.out.println(el2.getName());
// 给这个元素的值改个名字
el2.setText("cute");
// 再获得这个元素的子元素(指定)
Element el3 = book.getChild("price");
// 给这个值换个值
el3.setText(Float.toString(50.0f));
String indent = " ";
boolean newLines = true;
XMLOutputter xml = new XMLOutputter(indent, newLines, "gb2312");
xml.output(doc, new FileOutputStream("e:\\cute.xml"));
} catch (Exception e) {
System.out.println(e.getMessage());

}

}
}

分享到:
评论

相关推荐

    jdom 读取XML 文件

    接下来,我们将详细介绍使用JDOM读取XML文件的步骤: 1. 加载XML文件:使用`SAXBuilder`类来读取XML文件并构建DOM树。如下所示: ```java import org.jdom2.Document; import org.jdom2.input.SAXBuilder; public...

    用JDOM读取XML文件

    用JDOM读取XML文件 用JDOM读取XML文件用JDOM读取XML文件

    使用JDOM解析XML文件

    这些类构成了JDOM的核心,它们帮助开发者构建和操作XML文档。 在解析XML文件时,JDOM提供了SAXBuilder和DOMBuilder两种方式。SAXBuilder基于事件驱动,适用于处理大型XML文件,因为它占用较少的内存。DOMBuilder则...

    java利用jdom读取xml文件

    要使用JDOM读取XML文件,我们需要以下几个步骤: 1. 引入JDOM库:在项目中添加JDOM的依赖。如果你使用的是Maven,可以在pom.xml文件中添加以下依赖: ```xml &lt;groupId&gt;org.jdom &lt;artifactId&gt;jdom2 &lt;version&gt;...

    用jdom解析xml文件

    JDOM是Java中一个专门用来解析XML的库,它提供了方便的API来读取、修改和创建XML文档。在这个例子中,我们将深入探讨如何使用JDOM解析XML文件,并进行遍历与构建。 首先,我们需要了解JDOM的基本概念。JDOM主要由三...

    JAVA操作XML\XML\用JDOM操作XML文件--JSP中文网.mht

    JAVA操作XML\XML\用JDOM操作XML文件--JSP中文网.mht

    JDOM读取XML,并且创建XML

    JDOM提供了一个直接映射到XML文档的Java对象模型,使得操作XML变得更为便捷。 首先,让我们深入理解JDOM的基本概念。JDOM的核心类包括`Element`、`Attribute`、`Document`等。`Document`代表整个XML文档,它是XML...

    用JDOM操作XML文件

    JDOM 是一种用于在Java中处理XML文档的API,它提供了简单、高效的接口来创建、修改和读取XML数据。JDOM的设计目标是简化XML处理,使得开发人员能够更轻松地与XML数据交互,尤其对比SAX和DOM,JDOM在易用性和性能之间...

    JDOM操作xml文件的xmlBean

    JDOM(Java Document Object Model)是一种基于Java的XML解析API,它提供了一种简便的方式来解析和操作XML文档。与传统的DOM相比,JDOM更加注重性能和易用性,避免了DOM中的一些冗余设计。JDOM的主要优势在于它具有...

    jdom学习读取xml文件.files

    总的来说,JDOM作为Java处理XML的工具,可以帮助开发者轻松地读取和操作XML文档。在Spring框架中,虽然直接使用JDOM解析配置文件并不常见,但理解XML和JDOM的基本操作对于深入学习Spring的XML配置是有益的。通过阅读...

    用jdom解析xml

    解析XML文档通常涉及读取文件并将其转换为JDOM对象。以下是一个基本示例: ```java import org.jdom2.Document; import org.jdom2.input.SAXBuilder; public class XmlDocumentParser { public Document parseXml...

    利用jdom操作xml文档

    ### 利用 JDOM 操作 XML 文档 #### 一、引言 JDOM(Java Document Object Model)是一种用于处理 XML 数据的 Java 库。它提供了面向对象的 API,允许开发人员以简单直观的方式创建、读取、更新和保存 XML 文档。与 ...

    jdom解析xml文件

    在Java中,JDOM(Java Document Object Model)是一个流行的选择来解析和操作XML文档。它提供了一个纯Java的API,使开发者能够高效地读取、创建和修改XML内容。 ### JDOM基本概念 1. **Document对象**:JDOM的核心...

    jdom 读取修改xml文件

    ### JDOM 读取与修改 XML 文件 #### JDOM 简介 JDOM(Java Document Object Model)是一个用于处理 XML 数据的 Java 库。它提供了面向对象的 API 来解析、创建和修改 XML 文档。JDOM 的设计非常直观且易于使用,...

    利用JDOM解析xml文件

    JDOM是Java中一个专门用来处理XML的库,它提供了一种高效且方便的方式来创建、修改和读取XML文档。本篇文章将深入探讨如何利用JDOM解析XML文件,并基于XML中的类名生成相应的对象。 首先,我们需要理解JDOM的基本...

    jdom读取xml全属性文件

    总结一下,JDOM在Java EE环境中用于读取XML文件,提供了便捷的API来操作XML文档。在处理包含属性的XML元素时,可以利用`Element`类的`getAttributeValue()`方法轻松获取属性值。对于大型或复杂的XML文档,JDOM提供了...

    java jdom解析xml

    Java JDOM解析XML是Java开发中处理XML文档的一种方法,JDOM全称为Java Document Object Model,它是一个基于Java语言的API,用于创建、修改和读取XML文档。JDOM为XML处理提供了一种高效且方便的解决方案,尤其适用于...

    jdom 操作xml文档

    在实际开发中,使用JDOM操作XML文档可以极大地简化代码,提高效率。然而,需要注意的是,JDOM虽然简单易用,但在处理大型XML文件时可能会消耗大量内存。对于性能要求较高的场景,可以考虑使用SAX(Simple API for ...

    JDOM解析xml文档实例(自己编写,仅供参考)

    JDOM是Java中专门用来解析和操作XML的一个库,它提供了一种高效且方便的方式来处理XML文档。本实例将深入讲解如何使用JDOM进行XML解析。 首先,我们需要在项目中引入JDOM的类库。JDOM官方网站提供了不同版本的JDOM ...

Global site tag (gtag.js) - Google Analytics