一、前言
JDOM是Breet Mclaughlin和Jason Hunter两大Java高手的创作成果,2000年初,JDOM作为一个开放源代码项目正式开始研发。JDOM是一种解析XML的Java工具包。
DOM适合于当今流行的各种语言,包括Java,JavaScripte,VB,VBScript,Perl,C,C++等。它了为HTML和XML文档提供了一个可应用于不同平台的编程接口。W3C DOM的最新信息可从http://www.w3.org/TR2001/WD-DOM-Lever-3-Core-20010913查阅。微软在http://msdn.microsoft.com/library/default.asp?url=/library/en-us/xmlsdk30/htm/xmconxmldomuserguide.asp上也有DOM的详细技术信息。
DOM的设计为了适用于不同的语言,它保留了不同语言中非常相似的API。但是它并不适合于Java编程者的习惯。而JDOM作为一种轻量级API被制定,它最核心的要求是以Java为中心,只适合于Java语言,它遵循DOM的接口主要规则,除去了DOM中为了兼容各语言而与Java习惯的不同。
二、使用JDOM的前提条件
须要有SAX、DOM解析器的类文件,JDOM只是一种适合Java程序员来使用的Java XML解析器,目前流行的Java XML解析器还有:Apache Xerces Java、JAXP。
Xerces Java解析器是完全用Java编写的XML解析器,最新版本是2.5,它支持以下标准和API:
(1) XML1.0规范(第二版本)
(2) XML命名空间规范
(3) DOM2核心标准规范
(4) SAX2核心扩展
(5) JAXP1.2 :是Sun提供的使用Java处理XML的接口API。
(6) XML Schema结构和数据类型标准
还有最好的是它开放源代码,我们可以在http://xml.apache.org/dist/xerces-j/ 处去下载。下载文件Xerces-J-bin.2.5.0.zip。
解压下载文件,得到四个压缩包加到项目的路径中(其实不要全加,但不熟的情况下考虑这么做)。
JDOM的二进制版本下载:http://www.jdom.org/downloads/index.html
把解压后的jdom.jar文件加到项目的类路径中,另外便于调试,还要下载它的源代码。
三、使用JDOM解析XML
好了,现在该是正题了。下面通过一个简单的例子说明一下怎么用JDOM这一适合Java程序员习惯的工具包来解析XML文档。
为了简单,我用了如下XML作为要解析的XML文件:
<?xml version="1.0" encoding="gb2312"?>
<books>
<book email="zhoujunhui">
<name>rjzjh</name>
<price>60.0</price>
</book>
</books>
够简单的吧,但它对于我们关心的东西都有了,子节点,属性。
下面是用于解析这个XML文件的Java文件:
1 public class JDomParse {
2 public JDomParse(){
3 String xmlpath="library.xml";
4 SAXBuilder builder=new SAXBuilder(false);
5 try {
6 Document doc=builder.build(xmlpath);
7 Element books=doc.getRootElement();
8 List booklist=books.getChildren("book");
9 for (Iterator iter = booklist.iterator(); iter.hasNext();) {
10 Element book = (Element) iter.next();
11 String email=book.getAttributeValue("email");
12 System.out.println(email);
13 String name=book.getChildTextTrim("name");
14 System.out.println(name);
15 book.getChild("name").setText("alterrjzjh");
16
17 }
18
19 XMLOutputter outputter=new XMLOutputter();
20 outputter.output(doc,new FileOutputStream(xmlpath));
21
22 } catch (JDOMException e) {
23 e.printStackTrace();
24 } catch (IOException e) {
25 e.printStackTrace();
26 }
27 }
28 public static void main(String[] args) {
29 new JDomParse();
30 }
31}
不到30行代码,现在我对代码解释一下:
四、解释代码
引用的类:
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.Iterator;
import java.util.List;
//下面是引用到JDOM中的类
import org.jdom.Document;
import org.jdom.Element;
import org.jdom.JDOMException;
import org.jdom.input.SAXBuilder;
import org.jdom.output.XMLOutputter;
(1)使用JDOM首先要指定使用什么解析器。如:
SAXBuilder builder=new SAXBuilder(false); 这表示使用的是默认的解析器
(2)得到Document,我们以后要进行的所有操作都是对这个Document操作的:
Document doc=builder.build(xmlpath);
(3)得到根元素:
Element books=doc.getRootElement();
在JDOM中所有的节点(DOM中的概念)都是一个org.jdom.Element类,当然他的子节点也是一个org.jdom.Element类。
(4)得到元素(节点)的集合:
List booklist=books.getChildren("book");
这表示得到“books”元素的所在名称为“book”的元素,并把这些元素都放到一个List集合中
(5)轮循List集合
for (Iterator iter = booklist.iterator(); iter.hasNext();) {
Element book = (Element) iter.next();
}
还有一种轮循方法是:
for(int i=0;I<booklist.size();I++){
Element book=(Element)booklist.get(i);
}
(6)取得元素的属性:
String email=book.getAttributeValue("email");
取得元素book的属性名为“email”的属性值。
(7)取得元素的子元素(为最低层元素)的值:
String name=book.getChildTextTrim("name");
注意的是,必须确定book元素的名为“name”的子元素只有一个。
(8)改变元素(为最低层元素)的值:
book.getChild("name").setText("alterrjzjh");
这只是对Document的修改,并没有在实际的XML文档中进行修改
(9)保存Document的修改到XML文件中:
XMLOutputter outputter=new XMLOutputter();
outputter.output(doc,new FileOutputStream(xmlpath));
我们先要有一个XMLOutputter类,再把已经修改了的Document保存进XML文档中。
到此。用JDOM解析和处理XML文档讲解完了,麻雀虽小,五脏俱全。现在已对JDOM有个整体上的概念了吧
下面是xml文件:
<?xml version="1.0" encoding="UTF-8"?>
<persons>
<person perid="1001">
<name>lhu</name>
<age>89</age>
<address>安徽淮北</address>
<sex>男</sex>
</person>
<person perid="1002">
<name>we</name>
<age>56</age>
<address>北京海淀</address>
<sex>女</sex>
</person>
</persons>
下面是解析上面的xml文件:
通过JDOM来解析,需要借助第三方的组件.jdom.jar,网上有1.0的版本下载
package cn.com.jdom;
import java.io.File;
import java.io.IOException;
import java.util.Iterator;
import java.util.List;
import org.jdom.Attribute;
import org.jdom.Document;
import org.jdom.Element;
import org.jdom.JDOMException;
import org.jdom.ProcessingInstruction;
import org.jdom.input.SAXBuilder;
import com.sun.xml.internal.bind.v2.runtime.Name;
/**
* jdom解析xml文件
*
* @author ly *
*/
public class JDomXML {
public JDomXML() {
}
/**
* 解析xml文件
* @param xmlFile
*/
public void parseXml(File xmlFile) {
SAXBuilder sax = new SAXBuilder();//在内存中建立一个sax文档模型
try {
Document xmlDom = sax.build(xmlFile);//创建文档
//获得文件的根元素
Element root = xmlDom.getRootElement();
System.out.println("根元素是:"+root.getName());
//获得根元素的子节点
List childList = root.getChildren();
Iterator listIt = childList.iterator();
while(listIt.hasNext()){
Element element = (Element)listIt.next();
System.out.println("孩子结点是:"+element.getName());
}
//获得第一个孩子结点
Element firstChild = (Element) childList.get(0);
//获得孩子结点的属性
List attrList = firstChild.getAttributes();
Iterator attrIt = attrList.iterator();
while(attrIt.hasNext()){
Attribute attr = (Attribute ) attrIt.next();
System.out.println("第一个元素的属性是:"+attr.getName());
//获得属性的值
System.out.println("属性的值是:"+attr.getValue());
//获得属性的类型
System.out.println("属性的类型是:"+attr.getAttributeType());
}
List sonList = firstChild.getChildren();
Iterator sonIt = sonList.iterator();
while(sonIt.hasNext()){
Element temp = (Element)sonIt.next();
System.out.println("属性"+temp.getName()+"的值是:"+temp.getValue());
}
} catch (JDOMException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
public static void main(String[] args) {
JDomXML test = new JDomXML();
test.parseXml(new File("persons.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 ...
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 ...