JDOM 介绍及使用指南

2008-02-23 09:50:27来源:互联网 阅读 ()

新老客户大回馈,云服务器低至5折


转自:http://blog.csdn.net/hk2000c/archive/2003/09/26/15239.ASPx

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.JDOMorg.JDOM.inputorg.JDOM.outputorg.JDOM.adaptersorg.JDOM.transform

三、JDOM 类说明

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

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

org.JDOM.input输入类,一般用于文档的创建工作SAXBuilderDOMBuilderResultSetBuilder

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

使用前注意事项: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);// work with the JDOM document…

DOMOutputter converter = new DOMOutputter();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();// Raw outputoutp.output(doc, fileOutputStream);// Compressed outputoutp.setTextTrim(true);outp.output(doc, socket.getOutputStream());// Pretty outputoutp.setIndent(" ");outp.setNewlines(true);outp.output(doc, System.out);......详细请参阅最新的JDOM API手册

3.Element 类:(1)浏览Element树//获得根元素elementElement root = doc.getRootElement();// 获得所有子元素的一个listList allChildren = root.getChildren();// 获得指定名称子元素的listList namedChildren = root.getChildren("name");//获得指定名称的第一个子元素Element child = root.getChild("name");(这里的List是java.util.List)

标签:

版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有

上一篇:EMF-Ecore模型创建

下一篇:java.net.SocketImplFactory翻译