JDOM是Breet Mclaughlin和Jason Hunter兩大Java高手的創作成果,2000年初,JDOM作為一個開放源代碼項目正式開始研發。JDOM是一種解析XML的Java工具包。
JDOM的二進制版本下載:
http://www.jdom.org/downloads/index.html
把解壓后的jdom.jar文件加到項目的類路徑中,另外便于調試,還要下載它的源代碼。
一、解析XML
要解析的XML文件:
<?xml?version="1.0"?encoding="gb2312"?>
<books>
???<book?email="zhoujunhui">
?????<name>rjzjh</name>
?????<price>60.0</price>
??</book>
</books>
解析XML的java文件:
?1?package?com;
?2?
?3?import?java.io.IOException;
?4?import?java.util.*;
?5?import?org.jdom.*;
?6?import?org.jdom.input.SAXBuilder;?
?7?
?8?public?class?Test?{
?9?
10?????/**
11??????*?@param?args
12??????*/
13?????public?static?void?main(String[]?args)?{
14?????????SAXBuilder?sb=new?SAXBuilder(false);
15?????????Document?doc?=?null;
16?????????try?{
17?????????????doc?=?sb.build("sample.xml");
18?????????}?catch?(JDOMException?e)?{
19?????????????e.printStackTrace();
20?????????}?catch?(IOException?e)?{
21?????????????e.printStackTrace();
22?????????}?
23?????????Element?root=doc.getRootElement();?//獲取根元素
24?????????List?list=root.getChildren("book");//取名字為book的所有元素
25?????????for(int?i=0;i<list.size();i++){
26?????????????Element?element=(Element)list.get(i);
27?????????????String?email=element.getAttributeValue("email");
28?????????????String?name=element.getChildText("name");
29?????????????String?price=element.getChildText("price");
30?????????????System.out.println("name:"+name);
31?????????????System.out.println("price:"+price);
32?????????????System.out.println("email:"+email);
33?????????}
34?????}
35?}
36?
37?
二、生成XML:
java文件:
?1?package?com;
?2?
?3?import?java.io.FileWriter;
?4?import?java.io.IOException;
?5?import?java.util.*;
?6?import?org.jdom.*;
?7?import?org.jdom.input.SAXBuilder;?
?8?import?org.jdom.output.XMLOutputter;
?9?
10?public?class?Test?{
11?
12?????/**
13??????*?@param?args
14??????*/
15?????public?static?void?main(String[]?args)?{
16?????????//第一步,創建根元素?
17?
18?????????Element?carElement?=?new?Element("car");?
19?????????Document?myDocument?=?new?Document(carElement);?
20?
21?????????//因為一個?XML?文檔必須一直有一個唯一的根元素,所以?Document?將?Element?放在它的構造器中。?
22?
23?????????//第二步,添加一個?Attribute?
24?
25?????????carElement.setAttribute(new?Attribute("vin",?"123fhg5869705iop90"));?
26?
27?????????//第三步,添加其它元素?
28?
29?????????carElement.addContent(new?Element("make").addContent("Toyota"));?
30?
31?????????carElement.addContent(new?Element("model").addContent("Celica"));?
32?????????carElement.addContent(new?Element("year").addContent("1997"));?
33?????????carElement.addContent(new?Element("color").addContent("green"));?
34?????????carElement.addContent(new?Element("license").addContent("1ABC234").setAttribute("state",?"CA"));?
35?
36?????????//第四步,添加一條注釋?
37?
38?????????carElement.addContent(new?Comment("Description?of?a?car"));?
39?
40?????????//第五步,讀一個子元素?
41?
42?????????Element?yearElement?=?carElement.getChild("year");?
43?
44?????????//第六步,刪除子元素?
45?
46?????????boolean?removed?=?carElement.removeChild("year");?
47?
48?????????//第七步,存盤?
49?????????XMLOutputter?outputter?=?new?XMLOutputter();//用于輸出jdom?文檔
50?????????FileWriter?writer;
51?????????try?{
52?????????????writer?=?new?FileWriter("myFile.xml");
53?????????????outputter.output(myDocument,?writer);?
54?????????????writer.close();
55?????????}?catch?(IOException?e)?{
56?????????????//?TODO?自動生成?catch?塊
57?????????????e.printStackTrace();
58?????????}?
59?????????
60?
61?????}
62?}
63?
64?
生成的XML:
<?xml?version="1.0"?encoding="UTF-8"?>
<car?vin="123fhg5869705iop90">
<make>Toyota</make>
<model>Celica</model>
<color>green</color>
<license?state="CA">1ABC234</license>
<!--Description?of?a?car-->
</car>
posted on 2006-08-21 11:18
千山鳥飛絕 閱讀(555)
評論(0) 編輯 收藏 所屬分類:
J2SE