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 类说明
1、org.JDOM这个包里的类是你J解析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
org.JDOM.output
4、输出类,用于文档转换输出
XMLOutputter
SAXOutputter
DomOutputter
JTreeOutputter
使用前注意事项:
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.注意在JDOM里文档(Document)类由org.JDOM.Document 来表示。这要与org.w3c.dom中的Document区别开,这2种格式如何转换在后面会说明。
以下如无特指均指JDOM里的Document。
三、JDOM主要使用方法
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>";
textXml = textXml + "</note>";
SAXBuilder builder = new SAXBuilder();
Document doc = null;
Reader in= new StringReader(textXml);
try {
doc = builder.build(in);
Element root = doc.getRootElement();
List ls = root.getChildren();//注意此处取出的是root节点下面的一层的Element集合
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之间的相互转换使用方法,简单!
DOMBuilder builder = new DOMBuilder();
org.jdom.Document jdomDocument = builder.build(domDocument);
DOMOutputter converter = new DOMOutputter();// work with the JDOM document…
org.w3c.dom.Document domDocument = converter.output(jdomDocument);
// work with the DOM document…
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.Element 类:
(1)浏览Element树
Element root = doc.getRootElement();//获得根元素element
List allChildren = root.getChildren();// 获得所有子元素的一个list
List namedChildren = root.getChildren("name");// 获得指定名称子元素的list
Element child = root.getChild("name");//获得指定名称的第一个子元素
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");
3.可正确解释特殊字符
element.setText("<xml> content");
4.CDATA的数据写入、读出
element.addContent(new CDATA("<xml> content"));
String noDifference = element.getText();
=====================
好文,转载备用。
文中红色字体部分,目前还未完全理解,后续努力
分享到:
相关推荐
本篇文档《JDOM使用详解及实例(解析xml).pdf》将对JDOM的使用方法进行详细介绍,并提供实例来指导用户如何解析XML。 首先,JDOM提供了一种基于对象的XML表示方式。与DOM(文档对象模型)不同,JDOM不需要将XML文档...
JDOM 是一个专门为Java设计的XML处理库,它结合了SAX和DOM的优点,提供了一种高效且易于使用的API来创建、解析和操作XML文档。JDOM的主要目标是简化XML处理,通过利用Java语言的强大特性,如方法重载、集合和映射,...
在使用JDOM时,要区分JDOM的`Document`类与`org.w3c.dom.Document`,两者并不相同,但可以通过适配器进行转换。 总之,JDOM为Java开发者提供了一个简洁、高效的XML处理工具,它通过减少XML处理的复杂性,使开发者...
JDOM 在2000年的春天被Brett McLaughlin和Jason Hunter开发出来,以弥补DOM及SAX在实际应用当中的不足之处。 这些不足之处主要在于SAX没有文档修改、随机访问以及输出的功能,而对于DOM来说,JAVA程序员在使用时来...
**JDOM库详解** 在Java开发中,XML(可扩展标记语言)被广泛用于数据交换、配置存储等场景。为了方便地处理XML文档,Java提供了多种解析器,其中之一就是JDOM(Java Document Object Model)。本篇文章将深入探讨...
**JDOM驱动包详解** JDOM,全称为Java Document Object Model,是一个专为Java设计的XML处理库。它提供了一种高效、灵活且方便的方式来创建、解析和操作XML文档。在Java开发中,JDOM是处理XML数据的一种常用工具,...
**JDom详解** 1. **JDom简介** JDom是Java Document Object Model的简称,它是基于Java语言的一个XML处理库。相比于DOM(Document Object Model)API,JDom更专注于Java平台,提供了更加直观和高效的API设计,减少...
3.3.6 使用sax解析xml文档实例 74 3.4 jdom 83 3.4.1 下载并配置jdom 83 3.4.2 jdom api介绍 84 3.5 dom4j 88 3.5.1 下载并配置dom4j 88 3.5.2 dom4j api介绍 88 3.5.3 第一个实例 92 3.5.4 第二个实例 94 ...
例如,可以使用`DocumentBuilderFactory`和`DocumentBuilder`创建一个`Document`实例,然后添加`Element`,再添加子元素和属性。 4. **解析XML文档**:JDOM提供了`SAXBuilder`类来解析XML文件,将其转换为JDOM对象...
**JDOM API中文详解** JDOM,全称Java Document Object Model,是一个专为Java设计的XML处理库。它提供了一种高效、灵活且方便的方式来创建、读取、修改和保存XML文档。JDOM API是Java程序员操作XML文档的核心工具...
### DOM、JDOM、DOM4J解析XML实例详解 #### DOM 方式解析 XML 实例解析 ##### 一、DOM 概述与应用实例 DOM(Document Object Model)是一种树状结构的标准,用于表示 XML 文档的数据结构。它将 XML 文档视为节点...
3.3.6 使用sax解析xml文档实例 74 3.4 jdom 83 3.4.1 下载并配置jdom 83 3.4.2 jdom api介绍 84 3.5 dom4j 88 3.5.1 下载并配置dom4j 88 3.5.2 dom4j api介绍 88 3.5.3 第一个实例 92 3.5.4 第二个实例 94 ...
**JDOM SAXBuilder详解** JDOM,全称Java Document Object Model,是一个用于处理XML文档的Java库。它提供了一个纯Java的解决方案来创建、修改和读取XML文档,旨在提高性能和易用性。SAXBuilder是JDOM库中的一个...
### jdom4j解析XML实例详解 #### 生成XML文档 在示例代码中,`generateXML`方法用于创建一个XML文档。首先,通过`DocumentHelper.createDocument()`调用创建了一个空白的`Document`对象,这相当于创建了一个XML文件...
3.3.6 使用sax解析xml文档实例 74 3.4 jdom 83 3.4.1 下载并配置jdom 83 3.4.2 jdom api介绍 84 3.5 dom4j 88 3.5.1 下载并配置dom4j 88 3.5.2 dom4j api介绍 88 3.5.3 第一个实例 92 3.5.4 第二个实例 94 ...
3.3.6 使用sax解析xml文档实例 74 3.4 jdom 83 3.4.1 下载并配置jdom 83 3.4.2 jdom api介绍 84 3.5 dom4j 88 3.5.1 下载并配置dom4j 88 3.5.2 dom4j api介绍 88 3.5.3 第一个实例 92 3.5.4 第二个实例 94 ...
**JDOM解析模型详解** Java开发中,XML(Extensible Markup Language)作为一种数据交换和存储格式,被广泛应用在各种系统间的数据传输与配置文件中。为了处理XML文档,Java提供了多种解析器,其中之一就是JDOM。...
**JDOM 操作 XML 文档详解** XML (eXtensible Markup Language) 是一种用于标记数据的语言,广泛应用于数据交换、配置文件等场景。而 JDOM(Java Document Object Model)是一个专门为 Java 设计的 XML 处理库,它...
《JDOM与SAX解析XML文件详解》 在Java编程领域,处理XML文件是一项常见的任务。XML(eXtensible Markup Language)作为一种可扩展标记语言,广泛用于数据交换、配置存储以及文档结构化等场景。本文将深入探讨如何...