这个也是自己转载的,现在对DOM还比较熟悉,自己不要只是复制代码,可以试着去熟悉其中的一两种,以后会有用处的。

xml的四种解析方法及源代码(SAX、DOM、JDOM、DOM4J)

第一种:SAX解析 
SAX处理机制:SAX是一种基于事件驱动的API。利用SAX解析XML文档,牵涉到两个部分:解析器和事件处理器。解析器负责读取XML文档,并向事件处理器发生事件,如元素开始和元素结束事件;而事件处理器则负责对事件做出响应,对传递的XML数据进行处理。

测试用的xml文件:db.xml

Xml代码 

<?xml version="1.0" encoding="UTF-8"?>  
 <!--<!DOCTYPE dbconfig SYSTEM "db.dtd">-->  
 <dbconfig>  
  <db type="oracle">  
   <driver>oracle.jdbc.driver.OracleDriver</driver>  
   <url>jdbc:oracle:thin:@localhost:1521:oracle</url>  
   <user>scott</user>  
   <password>tiger</password>  
  </db>  
 </dbconfig>  
 <?xml version="1.0" encoding="UTF-8"?>
 <!--<!DOCTYPE dbconfig SYSTEM "db.dtd">-->
 <dbconfig>
  <db type="oracle">
   <driver>oracle.jdbc.driver.OracleDriver</driver>
   <url>jdbc:oracle:thin:@localhost:1521:oracle</url>
   <user>scott</user>
   <password>tiger</password>
  </db>
 </dbconfig>
 DTD文件db.dtd
 Xml代码


[html]  view plain copy print ?



1. <!ELEMENT dbconfig (db+)>    
2.   
3. <!ELEMENT db (driver,url,user,password)>    
4.   
5. <!ELEMENT driver (#PCDATA)>    
6.   
7. <!ELEMENT url (#PCDATA)>    
8.   
9. <!ELEMENT user (#PCDATA)>    
10.   
11. <!ELEMENT password (#PCDATA)>    
12.   
13. <!ATTLIST db type CDATA #REQUIRED>    
14.   
15. <!ELEMENT dbconfig (db+)>  
16.   
17. <!ELEMENT db (driver,url,user,password)>  
18.   
19. <!ELEMENT driver (#PCDATA)>  
20.   
21. <!ELEMENT url (#PCDATA)>  
22.   
23. <!ELEMENT user (#PCDATA)>  
24.   
25. <!ELEMENT password (#PCDATA)>  
26.   
27. <!ATTLIST db type CDATA #REQUIRED>



 

SAX解析实例一
org.xml.sax.DefalutHandler类:  可以扩展该类,给出自己的解析实现
SAXPrinter.java

Java代码 


[html]  view plain copy print ?



1. import java.io.File;     
2.   
3.     
4.   
5. import javax.xml.parsers.SAXParser;     
6.   
7. import javax.xml.parsers.SAXParserFactory;     
8.   
9.     
10.   
11. import org.xml.sax.Attributes;     
12.   
13. import org.xml.sax.SAXException;     
14.   
15. import org.xml.sax.helpers.DefaultHandler;     
16.   
17.     
18.   
19. public class SAXPrinter extends DefaultHandler     
20.   
21. {     
22.   
23.     
24.   
25.   /** *//**    
26.   
27.    * 文档开始事件    
28.   
29.    */    
30.   
31.     public void startDocument() throws SAXException     
32.   
33.     {     
34.   
35. <?xml version=\"1.0\" encoding=\"utf-8\"?>");     
36.   
37.     }     
38.   
39.          
40.   
41.   /** *//**    
42.   
43.    * 接收处理指令事件    
44.   
45.    */    
46.   
47.     public void processingInstruction(String target, String data) throws SAXException     
48.   
49.     {     
50.   
51. <?"+target+" "+data+"?>");     
52.   
53.     }     
54.   
55.          
56.   
57.   /** *//**    
58.   
59.    * 元素开始事件    
60.   
61.    * 参数说明:    
62.   
63.    *   uri - 名称空间 URI,如果元素没有任何名称空间 URI,或者没有正在执行名称空间处理,则为空字符串。    
64.   
65.    *   localName - 本地名称(不带前缀),如果没有正在执行名称空间处理,则为空字符串。    
66.   
67.    *   qName - 限定的名称(带有前缀),如果限定的名称不可用,则为空字符串。    
68.   
69.    *   attributes - 附加到元素的属性。如果没有属性,则它将是空的 Attributes 对象。    
70.   
71.    */    
72.   
73.     public void startElement(String uri, String localName, String qName, Attributes attrs) throws SAXException     
74.   
75.     {     
76.   
77. <"+qName);//输出元素名称     
78.   
79. len=attrs.getLength();//元素属性列表长度     
80.   
81.              
82.   
83.     //利用循环输出属性列表     
84.   
85. i=0;i<len;i++)     
86.   
87.         {     
88.   
89.             System.out.print(" ");     
90.   
91.             System.out.print(attrs.getQName(i));     
92.   
93.             System.out.print("=\"");     
94.   
95.             System.out.print(attrs.getValue(i));     
96.   
97.             System.out.print("\"");     
98.   
99.         }     
100.   
101. >");     
102.   
103.     }     
104.   
105.          
106.   
107.   /** *//**    
108.   
109.    * 元素中字符数据事件:接收元素中字符数据    
110.   
111.    * 注意:1.应用程序不要试图读取ch数组指定范围外的数据,(即start至length之外)    
112.   
113.    *      2.有些解析器将使用ignorableWhitespace()方法来报告元素内容中的空白,而不是characters()方法,如:进行有效性验证的解析器    
114.   
115.    */    
116.   
117.     public void characters(char[] ch, int start, int length) throws SAXException     
118.   
119.     {     
120.   
121.         System.out.print(new String(ch,start,length));     
122.   
123.     }     
124.   
125.     
126.   
127.   /** *//**    
128.   
129.    * 结束元素事件    
130.   
131.    */    
132.   
133.     public void endElement(String uri, String localName, String qName) throws SAXException     
134.   
135.     {     
136.   
137. </"+qName+">");     
138.   
139.     }     
140.   
141.     
142.   
143.     public static void main(String[] args)     
144.   
145.     {     
146.   
147. spf=SAXParserFactory.newInstance();     
148.   
149.              
150.   
151.         try    
152.   
153.         {     
154.   
155. sp=spf.newSAXParser();     
156.   
157.             sp.parse(new File("db.xml"),new SAXPrinter());     
158.   
159.         }     
160.   
161.         catch (Exception e)     
162.   
163.         {     
164.   
165.             e.printStackTrace();     
166.   
167.         }     
168.   
169.     }     
170.   
171. }    
172.   
173. import java.io.File;  
174.   
175.   
176. import javax.xml.parsers.SAXParser;  
177.   
178. import javax.xml.parsers.SAXParserFactory;  
179.   
180.   
181. import org.xml.sax.Attributes;  
182.   
183. import org.xml.sax.SAXException;  
184.   
185. import org.xml.sax.helpers.DefaultHandler;  
186.   
187.   
188. public class SAXPrinter extends DefaultHandler  
189.   
190. {  
191.   
192.   
193.   /** *//**  
194.   
195.    * 文档开始事件  
196.   
197.    */  
198.   
199.     public void startDocument() throws SAXException  
200.   
201.     {  
202.   
203. <?xml version=\"1.0\" encoding=\"utf-8\"?>");  
204.   
205.     }  
206.   
207.       
208.   
209.   /** *//**  
210.   
211.    * 接收处理指令事件  
212.   
213.    */  
214.   
215.     public void processingInstruction(String target, String data) throws SAXException  
216.   
217.     {  
218.   
219. <?"+target+" "+data+"?>");  
220.   
221.     }  
222.   
223.       
224.   
225.   /** *//**  
226.   
227.    * 元素开始事件  
228.   
229.    * 参数说明:  
230.   
231.    *   uri - 名称空间 URI,如果元素没有任何名称空间 URI,或者没有正在执行名称空间处理,则为空字符串。  
232.   
233.    *   localName - 本地名称(不带前缀),如果没有正在执行名称空间处理,则为空字符串。  
234.   
235.    *   qName - 限定的名称(带有前缀),如果限定的名称不可用,则为空字符串。  
236.   
237.    *   attributes - 附加到元素的属性。如果没有属性,则它将是空的 Attributes 对象。  
238.   
239.    */  
240.   
241.     public void startElement(String uri, String localName, String qName, Attributes attrs) throws SAXException  
242.   
243.     {  
244.   
245. <"+qName);//输出元素名称  
246.   
247. len=attrs.getLength();//元素属性列表长度  
248.   
249.           
250.   
251.     //利用循环输出属性列表  
252.   
253. i=0;i<len;i++)  
254.   
255.         {  
256.   
257.             System.out.print(" ");  
258.   
259.             System.out.print(attrs.getQName(i));  
260.   
261.             System.out.print("=\"");  
262.   
263.             System.out.print(attrs.getValue(i));  
264.   
265.             System.out.print("\"");  
266.   
267.         }  
268.   
269. >");  
270.   
271.     }  
272.   
273.       
274.   
275.   /** *//**  
276.   
277.    * 元素中字符数据事件:接收元素中字符数据  
278.   
279.    * 注意:1.应用程序不要试图读取ch数组指定范围外的数据,(即start至length之外)  
280.   
281.    *      2.有些解析器将使用ignorableWhitespace()方法来报告元素内容中的空白,而不是characters()方法,如:进行有效性验证的解析器  
282.   
283.    */  
284.   
285.     public void characters(char[] ch, int start, int length) throws SAXException  
286.   
287.     {  
288.   
289.         System.out.print(new String(ch,start,length));  
290.   
291.     }  
292.   
293.   
294.   /** *//**  
295.   
296.    * 结束元素事件  
297.   
298.    */  
299.   
300.     public void endElement(String uri, String localName, String qName) throws SAXException  
301.   
302.     {  
303.   
304. </"+qName+">");  
305.   
306.     }  
307.   
308.   
309.     public static void main(String[] args)  
310.   
311.     {  
312.   
313. spf=SAXParserFactory.newInstance();  
314.   
315.           
316.   
317.         try  
318.   
319.         {  
320.   
321. sp=spf.newSAXParser();  
322.   
323.             sp.parse(new File("db.xml"),new SAXPrinter());  
324.   
325.         }  
326.   
327.         catch (Exception e)  
328.   
329.         {  
330.   
331.             e.printStackTrace();  
332.   
333.         }  
334.   
335.     }  
336.   
337. }



 

SAX解析实例二
org.xml.sax.ContentHandler接口: 通过实现该接口给出自己的解析实现。
org.xml.sax.ErrorHandler接口:如果SAX应用程序需要实现定制的错误处理,那么它必须实现这个接口,并调用XMLReader对象的setErrorHandler()方法向解析器注册异常处理实例,这样,解析器将通过这个接口报告所有的错误和警告。
ContentHandlerImpl.java

Java代码 


[html]  view plain copy print ?



1. import org.xml.sax.Attributes;     
2.   
3. import org.xml.sax.ContentHandler;     
4.   
5. import org.xml.sax.Locator;     
6.   
7. import org.xml.sax.SAXException;     
8.   
9.     
10.   
11. public class ContentHandlerImpl implements ContentHandler     
12.   
13. {     
14.   
15.   /** *//**    
16.   
17.    * 文档开始事件    
18.   
19.    */    
20.   
21.   public void startDocument() throws SAXException     
22.   
23.   {     
24.   
25. <?xml version=\"1.0\" encoding=\"utf-8\"?>");     
26.   
27.   }     
28.   
29.        
30.   
31.   /** *//**    
32.   
33.    * 接收处理指令事件    
34.   
35.    */    
36.   
37.   public void processingInstruction(String target, String data) throws SAXException     
38.   
39.   {     
40.   
41. <?"+target+" "+data+"?>");     
42.   
43.   }     
44.   
45.        
46.   
47.   /** *//**    
48.   
49.    * 元素开始事件    
50.   
51.    * 参数说明:    
52.   
53.    *   uri - 名称空间 URI,如果元素没有任何名称空间 URI,或者没有正在执行名称空间处理,则为空字符串。    
54.   
55.    *   localName - 本地名称(不带前缀),如果没有正在执行名称空间处理,则为空字符串。    
56.   
57.    *   qName - 限定的名称(带有前缀),如果限定的名称不可用,则为空字符串。    
58.   
59.    *   attributes - 附加到元素的属性。如果没有属性,则它将是空的 Attributes 对象。    
60.   
61.    */    
62.   
63.   public void startElement(String uri, String localName, String qName, Attributes attrs) throws SAXException     
64.   
65.   {     
66.   
67. <"+qName);//输出元素名称     
68.   
69. len=attrs.getLength();//元素属性列表长度     
70.   
71.          
72.   
73.     //利用循环输出属性列表     
74.   
75. i=0;i<len;i++)     
76.   
77.     {     
78.   
79.       System.out.print(" ");     
80.   
81.       System.out.print(attrs.getQName(i));     
82.   
83.       System.out.print("=\"");     
84.   
85.       System.out.print(attrs.getValue(i));     
86.   
87.       System.out.print("\"");     
88.   
89.     }     
90.   
91. >");     
92.   
93.   }     
94.   
95.        
96.   
97.   /** *//**    
98.   
99.    * 元素中字符数据事件:接收元素中字符数据    
100.   
101.    * 注意:1.应用程序不要试图读取ch数组指定范围外的数据,(即start至length之外)    
102.   
103.    *      2.有些解析器将使用ignorableWhitespace()方法来报告元素内容中的空白,而不是characters()方法,如:进行有效性验证的解析器    
104.   
105.    */    
106.   
107.   public void characters(char[] ch, int start, int length) throws SAXException     
108.   
109.   {     
110.   
111.     System.out.print(new String(ch,start,length));     
112.   
113.   }     
114.   
115.     
116.   
117.   /** *//**    
118.   
119.    * 结束元素事件    
120.   
121.    */    
122.   
123.   public void endElement(String uri, String localName, String qName) throws SAXException     
124.   
125.   {     
126.   
127. </"+qName+">");     
128.   
129.   }     
130.   
131.     
132.   
133.   public void endDocument() throws SAXException     
134.   
135.   {     
136.   
137.          
138.   
139.   }     
140.   
141.     
142.   
143.   public void endPrefixMapping(String prefix) throws SAXException     
144.   
145.   {     
146.   
147.          
148.   
149.   }     
150.   
151.     
152.   
153.   public void ignorableWhitespace(char[] ch, int start, int length) throws SAXException     
154.   
155.   {     
156.   
157.          
158.   
159.   }     
160.   
161.     
162.   
163.   public void setDocumentLocator(Locator locator)     
164.   
165.   {     
166.   
167.          
168.   
169.   }     
170.   
171.     
172.   
173.   public void skippedEntity(String name) throws SAXException     
174.   
175.   {     
176.   
177.          
178.   
179.   }     
180.   
181.     
182.   
183.   public void startPrefixMapping(String prefix, String uri) throws SAXException     
184.   
185.   {     
186.   
187.          
188.   
189.   }     
190.   
191.     
192.   
193. }     
194.   
195. import org.xml.sax.Attributes;  
196.   
197. import org.xml.sax.ContentHandler;  
198.   
199. import org.xml.sax.Locator;  
200.   
201. import org.xml.sax.SAXException;  
202.   
203.   
204. public class ContentHandlerImpl implements ContentHandler  
205.   
206. {  
207.   
208.   /** *//**  
209.   
210.    * 文档开始事件  
211.   
212.    */  
213.   
214.   public void startDocument() throws SAXException  
215.   
216.   {  
217.   
218. <?xml version=\"1.0\" encoding=\"utf-8\"?>");  
219.   
220.   }  
221.   
222.     
223.   
224.   /** *//**  
225.   
226.    * 接收处理指令事件  
227.   
228.    */  
229.   
230.   public void processingInstruction(String target, String data) throws SAXException  
231.   
232.   {  
233.   
234. <?"+target+" "+data+"?>");  
235.   
236.   }  
237.   
238.     
239.   
240.   /** *//**  
241.   
242.    * 元素开始事件  
243.   
244.    * 参数说明:  
245.   
246.    *   uri - 名称空间 URI,如果元素没有任何名称空间 URI,或者没有正在执行名称空间处理,则为空字符串。  
247.   
248.    *   localName - 本地名称(不带前缀),如果没有正在执行名称空间处理,则为空字符串。  
249.   
250.    *   qName - 限定的名称(带有前缀),如果限定的名称不可用,则为空字符串。  
251.   
252.    *   attributes - 附加到元素的属性。如果没有属性,则它将是空的 Attributes 对象。  
253.   
254.    */  
255.   
256.   public void startElement(String uri, String localName, String qName, Attributes attrs) throws SAXException  
257.   
258.   {  
259.   
260. <"+qName);//输出元素名称  
261.   
262. len=attrs.getLength();//元素属性列表长度  
263.   
264.       
265.   
266.     //利用循环输出属性列表  
267.   
268. i=0;i<len;i++)  
269.   
270.     {  
271.   
272.       System.out.print(" ");  
273.   
274.       System.out.print(attrs.getQName(i));  
275.   
276.       System.out.print("=\"");  
277.   
278.       System.out.print(attrs.getValue(i));  
279.   
280.       System.out.print("\"");  
281.   
282.     }  
283.   
284. >");  
285.   
286.   }  
287.   
288.     
289.   
290.   /** *//**  
291.   
292.    * 元素中字符数据事件:接收元素中字符数据  
293.   
294.    * 注意:1.应用程序不要试图读取ch数组指定范围外的数据,(即start至length之外)  
295.   
296.    *      2.有些解析器将使用ignorableWhitespace()方法来报告元素内容中的空白,而不是characters()方法,如:进行有效性验证的解析器  
297.   
298.    */  
299.   
300.   public void characters(char[] ch, int start, int length) throws SAXException  
301.   
302.   {  
303.   
304.     System.out.print(new String(ch,start,length));  
305.   
306.   }  
307.   
308.   
309.   /** *//**  
310.   
311.    * 结束元素事件  
312.   
313.    */  
314.   
315.   public void endElement(String uri, String localName, String qName) throws SAXException  
316.   
317.   {  
318.   
319. </"+qName+">");  
320.   
321.   }  
322.   
323.   
324.   public void endDocument() throws SAXException  
325.   
326.   {  
327.   
328.       
329.   
330.   }  
331.   
332.   
333.   public void endPrefixMapping(String prefix) throws SAXException  
334.   
335.   {  
336.   
337.       
338.   
339.   }  
340.   
341.   
342.   public void ignorableWhitespace(char[] ch, int start, int length) throws SAXException  
343.   
344.   {  
345.   
346.       
347.   
348.   }  
349.   
350.   
351.   public void setDocumentLocator(Locator locator)  
352.   
353.   {  
354.   
355.       
356.   
357.   }  
358.   
359.   
360.   public void skippedEntity(String name) throws SAXException  
361.   
362.   {  
363.   
364.       
365.   
366.   }  
367.   
368.   
369.   public void startPrefixMapping(String prefix, String uri) throws SAXException  
370.   
371.   {  
372.   
373.       
374.   
375.   }  
376.   
377.   
378. }



 

ErrorHandlerImpl.java  

Java代码 


[html]  view plain copy print ?



1. public class ErrorHandlerImpl implements ErrorHandler     
2.   
3. {     
4.   
5.     
6.   
7.   public void warning(SAXParseException e) throws SAXException     
8.   
9.   {     
10.   
11.     System.out.println("[Warning ]"+getLocationString(e)+":"+e.getMessage());     
12.   
13.   }     
14.   
15.     
16.   
17.   public void error(SAXParseException e) throws SAXException     
18.   
19.   {     
20.   
21.     System.out.println("[Error ]"+getLocationString(e)+":"+e.getMessage());     
22.   
23.   }     
24.   
25.     
26.   
27.   public void fatalError(SAXParseException e) throws SAXException     
28.   
29.   {     
30.   
31.     System.out.println("[Fatal Error ]"+getLocationString(e)+":"+e.getMessage());     
32.   
33.   }     
34.   
35.     
36.   
37.   private String getLocationString(SAXParseException e)     
38.   
39.   {     
40.   
41. sb=new StringBuffer();     
42.   
43. publicId=e.getPublicId();     
44.   
45.     if(publicId!=null)     
46.   
47.     {     
48.   
49.       sb.append(publicId);     
50.   
51.       sb.append(" ");     
52.   
53.     }     
54.   
55.          
56.   
57. systemId=e.getSystemId();     
58.   
59.     if(systemId!=null)     
60.   
61.     {     
62.   
63.       sb.append(systemId);     
64.   
65.       sb.append(" ");     
66.   
67.     }     
68.   
69.          
70.   
71.     sb.append(e.getLineNumber());     
72.   
73.     sb.append(":");     
74.   
75.     sb.append(e.getColumnNumber());     
76.   
77.     return sb.toString();     
78.   
79.   }     
80.   
81. 1. }    
82.   
83. public class ErrorHandlerImpl implements ErrorHandler  
84.   
85. {  
86.   
87.   
88.   public void warning(SAXParseException e) throws SAXException  
89.   
90.   {  
91.   
92.     System.out.println("[Warning ]"+getLocationString(e)+":"+e.getMessage());  
93.   
94.   }  
95.   
96.   
97.   public void error(SAXParseException e) throws SAXException  
98.   
99.   {  
100.   
101.     System.out.println("[Error ]"+getLocationString(e)+":"+e.getMessage());  
102.   
103.   }  
104.   
105.   
106.   public void fatalError(SAXParseException e) throws SAXException  
107.   
108.   {  
109.   
110.     System.out.println("[Fatal Error ]"+getLocationString(e)+":"+e.getMessage());  
111.   
112.   }  
113.   
114.   
115.   private String getLocationString(SAXParseException e)  
116.   
117.   {  
118.   
119. sb=new StringBuffer();  
120.   
121. publicId=e.getPublicId();  
122.   
123.     if(publicId!=null)  
124.   
125.     {  
126.   
127.       sb.append(publicId);  
128.   
129.       sb.append(" ");  
130.   
131.     }  
132.   
133.       
134.   
135. systemId=e.getSystemId();  
136.   
137.     if(systemId!=null)  
138.   
139.     {  
140.   
141.       sb.append(systemId);  
142.   
143.       sb.append(" ");  
144.   
145.     }  
146.   
147.       
148.   
149.     sb.append(e.getLineNumber());  
150.   
151.     sb.append(":");  
152.   
153.     sb.append(e.getColumnNumber());  
154.   
155.     return sb.toString();  
156.   
157.   }  
158.   
159. }



 

SaxParserTest.java  

Java代码 


[html]  view plain copy print ?


1. import java.io.FileInputStream;     
2.   
3.     
4.   
5. import org.xml.sax.InputSource;     
6.   
7. import org.xml.sax.XMLReader;     
8.   
9. import org.xml.sax.helpers.XMLReaderFactory;     
10.   
11.     
12.   
13. public class SaxParserTest     
14.   
15. {     
16.   
17.   public static void main(String[] args)     
18.   
19.   {     
20.   
21.     try    
22.   
23.     {     
24.   
25. xmlReader=XMLReaderFactory.createXMLReader();     
26.   
27.       //关闭或打开验证     
28.   
29.       xmlReader.setFeature("http://xml.org/sax/features/validation",true);     
30.   
31.       //注册事件处理器     
32.   
33.       xmlReader.setContentHandler(new ContentHandlerImpl());     
34.   
35.       //注册异常处理器     
36.   
37.       xmlReader.setErrorHandler(new ErrorHandlerImpl());     
38.   
39.            
40.   
41.       xmlReader.parse(new InputSource(new FileInputStream("saxdb.xml")));     
42.   
43.     } catch (Exception e)     
44.   
45.     {     
46.   
47.       System.out.println(e.getMessage());     
48.   
49.     }     
50.   
51.   }     
52.   
53. }    
54.   
55. import java.io.FileInputStream;  
56.   
57.   
58. import org.xml.sax.InputSource;  
59.   
60. import org.xml.sax.XMLReader;  
61.   
62. import org.xml.sax.helpers.XMLReaderFactory;  
63.   
64.   
65. public class SaxParserTest  
66.   
67. {  
68.   
69.   public static void main(String[] args)  
70.   
71.   {  
72.   
73.     try  
74.   
75.     {  
76.   
77. xmlReader=XMLReaderFactory.createXMLReader();  
78.   
79.       //关闭或打开验证  
80.   
81.       xmlReader.setFeature("http://xml.org/sax/features/validation",true);  
82.   
83.       //注册事件处理器  
84.   
85.       xmlReader.setContentHandler(new ContentHandlerImpl());  
86.   
87.       //注册异常处理器  
88.   
89.       xmlReader.setErrorHandler(new ErrorHandlerImpl());  
90.   
91.         
92.   
93.       xmlReader.parse(new InputSource(new FileInputStream("saxdb.xml")));  
94.   
95.     } catch (Exception e)  
96.   
97.     {  
98.   
99.       System.out.println(e.getMessage());  
100.   
101.     }  
102.   
103.   }  
104.   
105. }

 

第二种:DOM解析
DOM中的核心概念就是节点。DOM在分析XML文档时,将将组成XML文档的各个部分(元素、属性、文本、注释、处理指令等)映射为一个对象(节点)。在内存中,这些节点形成一课文档树。整棵树是一个节点,树中的每一个节点也是一棵树(子树),可以说,DOM就是对这棵树的一个对象描述,我们通过访问树中的节点来存取XML文档的内容。
PS:属性节点是附属于元素的,不能被看做是元素的子节点,更不能作为一个单独的节点

DOMPrinter.java

Java代码 


[html]  view plain copy print ?



1. import org.w3c.dom.Document;     
2.   
3. import org.w3c.dom.NamedNodeMap;     
4.   
5. import org.w3c.dom.Node;     
6.   
7.     
8.   
9. import com.sun.org.apache.xerces.internal.parsers.DOMParser;     
10.   
11.     
12.   
13. public class DOMPrinter     
14.   
15. {     
16.   
17.   public static void main(String[] args)     
18.   
19.   {     
20.   
21.     try    
22.   
23.     {     
24.   
25.       /** *//** 获取Document对象 */    
26.   
27. parser = new DOMParser();     
28.   
29.       parser.parse("db.xml");     
30.   
31. document = parser.getDocument();     
32.   
33.       printNode(document);     
34.   
35.     } catch (Exception e)     
36.   
37.     {     
38.   
39.       e.printStackTrace();     
40.   
41.     }     
42.   
43.   }     
44.   
45.        
46.   
47.   public static void printNode(Node node)     
48.   
49.   {     
50.   
51. nodeType=node.getNodeType();     
52.   
53.     switch(nodeType)     
54.   
55.     {     
56.   
57.     case Node.PROCESSING_INSTRUCTION_NODE://预处理指令类型     
58.   
59.       printNodeInfo(node);     
60.   
61.       break;     
62.   
63.     case Node.ELEMENT_NODE://元素节点类型     
64.   
65.       printNodeInfo(node);     
66.   
67.       printAttribute(node);     
68.   
69.       break;     
70.   
71.     case Node.TEXT_NODE://文本节点类型     
72.   
73.       printNodeInfo(node);     
74.   
75.       break;     
76.   
77.     default:     
78.   
79.       break;     
80.   
81.     }     
82.   
83.          
84.   
85. child=node.getFirstChild();     
86.   
87.     while(child!=null)     
88.   
89.     {     
90.   
91.       printNode(child);     
92.   
93. child=child.getNextSibling();     
94.   
95.     }     
96.   
97.   }     
98.   
99.        
100.   
101.   /** *//**    
102.   
103.    * 根据节点类型打印节点    
104.   
105.    * @param node    
106.   
107.    */    
108.   
109.   public static void printNodeInfo(Node node)     
110.   
111.   {     
112.   
113.     if (node.getNodeType() == Node.ELEMENT_NODE)     
114.   
115.     {     
116.   
117.       System.out.println("NodeName: " + node.getNodeName());     
118.   
119.     }     
120.   
121.     else if (node.getNodeType() == Node.TEXT_NODE)     
122.   
123.     {     
124.   
125. value = node.getNodeValue().trim();     
126.   
127.       if (!value.equals(""))     
128.   
129.         System.out.println("NodeValue: " + value);     
130.   
131.       else    
132.   
133.         System.out.println();     
134.   
135.     }else    
136.   
137.     {     
138.   
139.       System.out.println(node.getNodeName()+" : "+node.getNodeValue());     
140.   
141.     }     
142.   
143.   }     
144.   
145.        
146.   
147.   /** *//**    
148.   
149.    * 打印节点属性    
150.   
151.    * @param aNode 节点    
152.   
153.    */    
154.   
155.   public static void printAttribute(Node aNode)     
156.   
157.   {     
158.   
159. attrs = aNode.getAttributes();     
160.   
161.     if(attrs!=null)     
162.   
163.     {     
164.   
165. i = 0; i < attrs.getLength(); i++)     
166.   
167.       {     
168.   
169. attNode = attrs.item(i);     
170.   
171.         System.out.println("Attribute: " + attNode.getNodeName() + "=\"" + attNode.getNodeValue()+"\"");     
172.   
173.       }     
174.   
175.     }     
176.   
177.   }    
178.   
179. import org.w3c.dom.Document;  
180.   
181. import org.w3c.dom.NamedNodeMap;  
182.   
183. import org.w3c.dom.Node;  
184.   
185.   
186. import com.sun.org.apache.xerces.internal.parsers.DOMParser;  
187.   
188.   
189. public class DOMPrinter  
190.   
191. {  
192.   
193.   public static void main(String[] args)  
194.   
195.   {  
196.   
197.     try  
198.   
199.     {  
200.   
201.       /** *//** 获取Document对象 */  
202.   
203. parser = new DOMParser();  
204.   
205.       parser.parse("db.xml");  
206.   
207. document = parser.getDocument();  
208.   
209.       printNode(document);  
210.   
211.     } catch (Exception e)  
212.   
213.     {  
214.   
215.       e.printStackTrace();  
216.   
217.     }  
218.   
219.   }  
220.   
221.     
222.   
223.   public static void printNode(Node node)  
224.   
225.   {  
226.   
227. nodeType=node.getNodeType();  
228.   
229.     switch(nodeType)  
230.   
231.     {  
232.   
233.     case Node.PROCESSING_INSTRUCTION_NODE://预处理指令类型  
234.   
235.       printNodeInfo(node);  
236.   
237.       break;  
238.   
239.     case Node.ELEMENT_NODE://元素节点类型  
240.   
241.       printNodeInfo(node);  
242.   
243.       printAttribute(node);  
244.   
245.       break;  
246.   
247.     case Node.TEXT_NODE://文本节点类型  
248.   
249.       printNodeInfo(node);  
250.   
251.       break;  
252.   
253.     default:  
254.   
255.       break;  
256.   
257.     }  
258.   
259.       
260.   
261. child=node.getFirstChild();  
262.   
263.     while(child!=null)  
264.   
265.     {  
266.   
267.       printNode(child);  
268.   
269. child=child.getNextSibling();  
270.   
271.     }  
272.   
273.   }  
274.   
275.     
276.   
277.   /** *//**  
278.   
279.    * 根据节点类型打印节点  
280.   
281.    * @param node  
282.   
283.    */  
284.   
285.   public static void printNodeInfo(Node node)  
286.   
287.   {  
288.   
289.     if (node.getNodeType() == Node.ELEMENT_NODE)  
290.   
291.     {  
292.   
293.       System.out.println("NodeName: " + node.getNodeName());  
294.   
295.     }  
296.   
297.     else if (node.getNodeType() == Node.TEXT_NODE)  
298.   
299.     {  
300.   
301. value = node.getNodeValue().trim();  
302.   
303.       if (!value.equals(""))  
304.   
305.         System.out.println("NodeValue: " + value);  
306.   
307.       else  
308.   
309.         System.out.println();  
310.   
311.     }else  
312.   
313.     {  
314.   
315.       System.out.println(node.getNodeName()+" : "+node.getNodeValue());  
316.   
317.     }  
318.   
319.   }  
320.   
321.     
322.   
323.   /** *//**  
324.   
325.    * 打印节点属性  
326.   
327.    * @param aNode 节点  
328.   
329.    */  
330.   
331.   public static void printAttribute(Node aNode)  
332.   
333.   {  
334.   
335. attrs = aNode.getAttributes();  
336.   
337.     if(attrs!=null)  
338.   
339.     {  
340.   
341. i = 0; i < attrs.getLength(); i++)  
342.   
343.       {  
344.   
345. attNode = attrs.item(i);  
346.   
347.         System.out.println("Attribute: " + attNode.getNodeName() + "=\"" + attNode.getNodeValue()+"\"");  
348.   
349.       }  
350.   
351.     }  
352.   
353.   }


 

DOM生成XML文档:DOMCreateExample.java  

Java代码 


[html]  view plain copy print ?



1. import java.io.FileNotFoundException;     
2.   
3. import java.io.FileOutputStream;     
4.   
5. import java.io.IOException;     
6.   
7.     
8.   
9. import javax.xml.parsers.DocumentBuilder;     
10.   
11. import javax.xml.parsers.DocumentBuilderFactory;     
12.   
13. import javax.xml.parsers.ParserConfigurationException;     
14.   
15.     
16.   
17. import org.w3c.dom.Document;     
18.   
19. import org.w3c.dom.Element;     
20.   
21.     
22.   
23. import com.sun.org.apache.xml.internal.serialize.XMLSerializer;     
24.   
25.     
26.   
27. public class DOMCreateExample     
28.   
29. {     
30.   
31.   public static void main(String[] args) throws ParserConfigurationException     
32.   
33.   {     
34.   
35. domImp = DOMImplementationImpl.getDOMImplementation();     
36.   
37. builderFact = DocumentBuilderFactory.newInstance();     
38.   
39. builder = builderFact.newDocumentBuilder();     
40.   
41.         
42.   
43. doc = builder.newDocument();     
44.   
45. doc = domImp.createDocument(null, null, null);     
46.   
47.         
48.   
49. root = doc.createElement("games");     
50.   
51. child1 = doc.createElement("game");     
52.   
53.     child1.appendChild(doc.createTextNode("Final Fantasy VII"));     
54.   
55.     child1.setAttribute("genre", "rpg");     
56.   
57.     root.appendChild(child1);     
58.   
59.     doc.appendChild(root);     
60.   
61.           
62.   
63.      XMLSerializer serial;     
64.   
65.     try    
66.   
67.     {     
68.   
69. serial = new XMLSerializer(new FileOutputStream("domcreate.xml"), null);     
70.   
71.       serial.serialize(doc);     
72.   
73.     } catch (FileNotFoundException e1)     
74.   
75.     {     
76.   
77.       e1.printStackTrace();     
78.   
79.     } catch (IOException e)     
80.   
81.     {     
82.   
83.       e.printStackTrace();     
84.   
85.     }     
86.   
87.   }     
88.   
89. }    
90.   
91. import java.io.FileNotFoundException;  
92.   
93. import java.io.FileOutputStream;  
94.   
95. import java.io.IOException;  
96.   
97.   
98. import javax.xml.parsers.DocumentBuilder;  
99.   
100. import javax.xml.parsers.DocumentBuilderFactory;  
101.   
102. import javax.xml.parsers.ParserConfigurationException;  
103.   
104.   
105. import org.w3c.dom.Document;  
106.   
107. import org.w3c.dom.Element;  
108.   
109.   
110. import com.sun.org.apache.xml.internal.serialize.XMLSerializer;  
111.   
112.   
113. public class DOMCreateExample  
114.   
115. {  
116.   
117.   public static void main(String[] args) throws ParserConfigurationException  
118.   
119.   {  
120.   
121. domImp = DOMImplementationImpl.getDOMImplementation();  
122.   
123. builderFact = DocumentBuilderFactory.newInstance();  
124.   
125. builder = builderFact.newDocumentBuilder();  
126.   
127.      
128.   
129. doc = builder.newDocument();  
130.   
131. doc = domImp.createDocument(null, null, null);  
132.   
133.      
134.   
135. root = doc.createElement("games");  
136.   
137. child1 = doc.createElement("game");  
138.   
139.     child1.appendChild(doc.createTextNode("Final Fantasy VII"));  
140.   
141.     child1.setAttribute("genre", "rpg");  
142.   
143.     root.appendChild(child1);  
144.   
145.     doc.appendChild(root);  
146.   
147.        
148.   
149.      XMLSerializer serial;  
150.   
151.     try  
152.   
153.     {  
154.   
155. serial = new XMLSerializer(new FileOutputStream("domcreate.xml"), null);  
156.   
157.       serial.serialize(doc);  
158.   
159.     } catch (FileNotFoundException e1)  
160.   
161.     {  
162.   
163.       e1.printStackTrace();  
164.   
165.     } catch (IOException e)  
166.   
167.     {  
168.   
169.       e.printStackTrace();  
170.   
171.     }  
172.   
173.   }  
174.   
175. }


 

第三种JDOM解析 
JDOM利用了java语言的优秀特性,极大地简化了对XML文档的处理,相比DOM简单易用。JDOM也使用对象树来表示XML文档,JDOM使用SAXj解析器来分析XML文档,构建JDOM树。然而JOMD本身并没有提供解析器,它使用其他开发商提供的标准SAX解析器,JDOM默认通过JAXP来选择解析器,可以通过手动知道解析器的类名来设置。
首先要在工程中添加jdom的jar包,这里使用jdom1.0.jar。(见附件)
JDOMConvert.java 

Java代码 


[java]  view plain copy print ?



1. import java.io.File;     
2.   
3.     
4.   
5. import org.jdom.Document;     
6.   
7. import org.jdom.Element;     
8.   
9. import org.jdom.input.SAXBuilder;     
10.   
11. import org.jdom.output.Format;     
12.   
13. import org.jdom.output.XMLOutputter;     
14.   
15.     
16.   
17. public class JDOMConvert     
18.   
19. {     
20.   
21. public static void main(String[] args)     
22.   
23.     {     
24.   
25. new SAXBuilder();     
26.   
27. try    
28.   
29.         {     
30.   
31. new File("domdb.xml"));     
32.   
33.            
34.   
35. //首先创建好节点     
36.   
37. new Element("db");     
38.   
39. new Element("driver");     
40.   
41. new Element("url");     
42.   
43. new Element("user");     
44.   
45. new Element("password");     
46.   
47.            
48.   
49. //设置节点的值     
50.   
51. "com.mysql.jdbc.Driver");     
52.   
53. "jdbc:mysql://localhost/mySql");     
54.   
55. "root");     
56.   
57. "xlc");     
58.   
59.            
60.   
61. //添加到根节点     
62.   
63.       eltDb.addContent(eltDriver);     
64.   
65.       eltDb.addContent(eltUrl);     
66.   
67.       eltDb.addContent(eltUser);     
68.   
69.       eltDb.addContent(eltPassword);     
70.   
71. //根节点设置属性     
72.   
73. "type","mysql");     
74.   
75.            
76.   
77.       Element root=doc.getRootElement();     
78.   
79. //root.removeChild("db");//删除节点     
80.   
81. //增加节点     
82.   
83.            
84.   
85. //修改db节点中内容     
86.   
87. "db").getChild("user").setText("system");     
88.   
89. "db").getChild("password").setText("manager");     
90.   
91.            
92.   
93. new XMLOutputter();     
94.   
95.                  
96.   
97. //设置XML格式     
98.   
99.             Format fmt=Format.getPrettyFormat();     
100.   
101. "    ");     
102.   
103. "utf-8");     
104.   
105.                  
106.   
107.             xmlOut.setFormat(fmt);     
108.   
109.             xmlOut.output(doc,System.out);     
110.   
111.         }     
112.   
113. catch (Exception e)     
114.   
115.         {     
116.   
117.             e.printStackTrace();     
118.   
119.         }     
120.   
121.     }     
122.   
123. }    
124.   
125. import java.io.File;  
126.   
127.   
128. import org.jdom.Document;  
129.   
130. import org.jdom.Element;  
131.   
132. import org.jdom.input.SAXBuilder;  
133.   
134. import org.jdom.output.Format;  
135.   
136. import org.jdom.output.XMLOutputter;  
137.   
138.   
139. public class JDOMConvert  
140.   
141. {  
142.   
143. public static void main(String[] args)  
144.   
145.     {  
146.   
147. new SAXBuilder();  
148.   
149. try  
150.   
151.         {  
152.   
153. new File("domdb.xml"));  
154.   
155.         
156.   
157. //首先创建好节点  
158.   
159. new Element("db");  
160.   
161. new Element("driver");  
162.   
163. new Element("url");  
164.   
165. new Element("user");  
166.   
167. new Element("password");  
168.   
169.         
170.   
171. //设置节点的值  
172.   
173. "com.mysql.jdbc.Driver");  
174.   
175. "jdbc:mysql://localhost/mySql");  
176.   
177. "root");  
178.   
179. "xlc");  
180.   
181.         
182.   
183. //添加到根节点  
184.   
185.       eltDb.addContent(eltDriver);  
186.   
187.       eltDb.addContent(eltUrl);  
188.   
189.       eltDb.addContent(eltUser);  
190.   
191.       eltDb.addContent(eltPassword);  
192.   
193. //根节点设置属性  
194.   
195. "type","mysql");  
196.   
197.         
198.   
199.       Element root=doc.getRootElement();  
200.   
201. //root.removeChild("db");//删除节点  
202.   
203. //增加节点  
204.   
205.         
206.   
207. //修改db节点中内容  
208.   
209. "db").getChild("user").setText("system");  
210.   
211. "db").getChild("password").setText("manager");  
212.   
213.         
214.   
215. new XMLOutputter();  
216.   
217.               
218.   
219. //设置XML格式  
220.   
221.             Format fmt=Format.getPrettyFormat();  
222.   
223. "    ");  
224.   
225. "utf-8");  
226.   
227.               
228.   
229.             xmlOut.setFormat(fmt);  
230.   
231.             xmlOut.output(doc,System.out);  
232.   
233.         }  
234.   
235. catch (Exception e)  
236.   
237.         {  
238.   
239.             e.printStackTrace();  
240.   
241.         }  
242.   
243.     }  
244.   
245. }



JDOM生成XML文档:JDOMCreate.java  

Java代码 



[java]  view plain copy print ?



1. <span style="color:#000000;">import java.io.IOException;     
2.   
3.     
4.   
5. import org.jdom.Document;     
6.   
7. import org.jdom.Element;     
8.   
9. import org.jdom.output.XMLOutputter;     
10.   
11.     
12.   
13. public class JDOMCreate     
14.   
15. {     
16.   
17. public static void main(String[] args)     
18.   
19.   {     
20.   
21. new Document(new Element("games"));     
22.   
23. new Element("game").setText("Final Fantasy VI");     
24.   
25.     doc.getRootElement().addContent(newGame);     
26.   
27. "genre", "rpg");     
28.   
29. new XMLOutputter();     
30.   
31. try    
32.   
33.     {     
34.   
35.       domstream.output(doc, System.out);     
36.   
37. catch (IOException e)     
38.   
39.     {     
40.   
41.       e.printStackTrace();     
42.   
43.     }     
44.   
45.   }     
46.   
47. }    
48.   
49. import java.io.IOException;  
50.   
51.   
52. import org.jdom.Document;  
53.   
54. import org.jdom.Element;  
55.   
56. import org.jdom.output.XMLOutputter;  
57.   
58.   
59. public class JDOMCreate  
60.   
61. {  
62.   
63. public static void main(String[] args)  
64.   
65.   {  
66.   
67. new Document(new Element("games"));  
68.   
69. new Element("game").setText("Final Fantasy VI");  
70.   
71.     doc.getRootElement().addContent(newGame);  
72.   
73. "genre", "rpg");  
74.   
75. new XMLOutputter();  
76.   
77. try  
78.   
79.     {  
80.   
81.       domstream.output(doc, System.out);  
82.   
83. catch (IOException e)  
84.   
85.     {  
86.   
87.       e.printStackTrace();  
88.   
89.     }  
90.   
91.   }  
92.   
93. }  
94.   
95. </span>


第四种:DOM4J解析
dom4j与JDOM一样,也是一种用于解析XML文档的开放源代码的XML框架,dom4j也应用于java平台,dom4j API使用了java集合框架并完全支持DOM、SAX和JAXP。与JDOM不同的是,dom4j使用接口和抽象类,虽然dom4j的API相对复杂些,但它提供了比JDOM更好的灵活性。dom4j也使用SAX解析器来分析XML文档,创建dom4j树。此外dom4j也可以接收DOM格式的内容,并提供了从dom4j树到SAX事件流或W3C DOM树的输出机制。与JDOM不同,dom4j自带了一个SAX解析器Aelfred2,如果没有显示的设置SAX解析器,也没有通过系统属性org.xml.sax.driver设置解析器,dom3j将会使用JAXP来加载JAXP配置的解析器,如果创建解析器失败,那么最后才使用dom4j自带的Aelfred2解析器。
同样,首先要在工程中添加dom4j的jar包,这里使用dom4j-1.6.1.jar。(见附件)
Dom4j生成XML文档db.xml:Dom4jCreate.java 

Java代码 


[java]  view plain copy print ?



1. import java.io.IOException;     
2.   
3.     
4.   
5. import org.dom4j.Document;     
6.   
7. import org.dom4j.DocumentHelper;     
8.   
9. import org.dom4j.Element;     
10.   
11. import org.dom4j.io.OutputFormat;     
12.   
13. import org.dom4j.io.XMLWriter;     
14.   
15.     
16.   
17. public class Dom4jCreate     
18.   
19. {     
20.   
21.     
22.   
23. public static void main(String[] args)     
24.   
25.   {     
26.   
27.     Document doc = DocumentHelper.createDocument();     
28.   
29.     
30.   
31. "xml-stylesheet", "type='text/xsl' href='db.xsl'");     
32.   
33. "dbconfig", null,"db.dtd");     
34.   
35.          
36.   
37. //Element root=DocumentHelper.createElement("dbconfig");     
38.   
39. // doc.setRootElement(root);     
40.   
41. "dbconfig");     
42.   
43.     
44.   
45. "db");     
46.   
47. "driver");     
48.   
49. "url");     
50.   
51. "user");     
52.   
53. "password");     
54.   
55.          
56.   
57. "com.mysql.jdbc.Driver");     
58.   
59. "jdbc:mysql://localhost/mySql");     
60.   
61. "root");     
62.   
63. "xlc");     
64.   
65. "type","mysql");     
66.   
67.              
68.   
69. try    
70.   
71.     {     
72.   
73. //设置输出格式     
74.   
75. new OutputFormat("    ", true);     
76.   
77. "UTF-8");     
78.   
79.            
80.   
81. /**//*PrintWriter pw = new PrintWriter(System.out);  
82. 
83.       doc.write(pw);  
84. 
85.       pw.flush();  
86. 
87.       pw.close();*/    
88.   
89.     
90.   
91. new XMLWriter(System.out, outFmt);     
92.   
93. // XMLWriter xmlWriter=new XMLWriter(new FileWriter("db.xml"),outFmt);     
94.   
95.       xmlWriter.write(doc);     
96.   
97.       xmlWriter.flush();     
98.   
99.       xmlWriter.close();     
100.   
101. catch (IOException e)     
102.   
103.     {     
104.   
105.       e.printStackTrace();     
106.   
107.     }     
108.   
109.   }     
110.   
111. }    
112.   
113. import java.io.IOException;  
114.   
115.   
116. import org.dom4j.Document;  
117.   
118. import org.dom4j.DocumentHelper;  
119.   
120. import org.dom4j.Element;  
121.   
122. import org.dom4j.io.OutputFormat;  
123.   
124. import org.dom4j.io.XMLWriter;  
125.   
126.   
127. public class Dom4jCreate  
128.   
129. {  
130.   
131.   
132. public static void main(String[] args)  
133.   
134.   {  
135.   
136.     Document doc = DocumentHelper.createDocument();  
137.   
138.   
139. "xml-stylesheet", "type='text/xsl' href='db.xsl'");  
140.   
141. "dbconfig", null,"db.dtd");  
142.   
143.       
144.   
145. //Element root=DocumentHelper.createElement("dbconfig");  
146.   
147. // doc.setRootElement(root);  
148.   
149. "dbconfig");  
150.   
151.   
152. "db");  
153.   
154. "driver");  
155.   
156. "url");  
157.   
158. "user");  
159.   
160. "password");  
161.   
162.       
163.   
164. "com.mysql.jdbc.Driver");  
165.   
166. "jdbc:mysql://localhost/mySql");  
167.   
168. "root");  
169.   
170. "xlc");  
171.   
172. "type","mysql");  
173.   
174.           
175.   
176. try  
177.   
178.     {  
179.   
180. //设置输出格式  
181.   
182. new OutputFormat("    ", true);  
183.   
184. "UTF-8");  
185.   
186.         
187.   
188. /**//*PrintWriter pw = new PrintWriter(System.out);
189. 
190.       doc.write(pw);
191. 
192.       pw.flush();
193. 
194.       pw.close();*/  
195.   
196.   
197. new XMLWriter(System.out, outFmt);  
198.   
199. // XMLWriter xmlWriter=new XMLWriter(new FileWriter("db.xml"),outFmt);  
200.   
201.       xmlWriter.write(doc);  
202.   
203.       xmlWriter.flush();  
204.   
205.       xmlWriter.close();  
206.   
207. catch (IOException e)  
208.   
209.     {  
210.   
211.       e.printStackTrace();  
212.   
213.     }  
214.   
215.   }  
216.   
217. }



 

Dom4j修改XML文档db.xml:Dom4jModify.java 

Java代码 


[html]  view plain copy print ?



1. import java.io.File;     
2.   
3. import java.io.FileWriter;     
4.   
5. import java.util.Iterator;     
6.   
7. import java.util.List;     
8.   
9.     
10.   
11. import org.dom4j.Document;     
12.   
13. import org.dom4j.Element;     
14.   
15. import org.dom4j.io.OutputFormat;     
16.   
17. import org.dom4j.io.SAXReader;     
18.   
19. import org.dom4j.io.XMLWriter;     
20.   
21.     
22.   
23. public class Dom4jModify     
24.   
25. {     
26.   
27.   public Document modifyDocument(File inputXml)     
28.   
29.   {     
30.   
31.     try    
32.   
33.     {     
34.   
35. saxReader = new SAXReader();     
36.   
37. document = saxReader.read(inputXml);     
38.   
39.       document.addDocType("dbconfig",null,"db.dtd");     
40.   
41. list = document.content();     
42.   
43.     
44.   
45. iter = document.nodeIterator();     
46.   
47. iter = list.iterator();     
48.   
49.     
50.   
51. element = (Element) iter.next();     
52.   
53.       element.element("db").attribute("type").setValue("mysql");     
54.   
55.       element.element("db").element("url").setText("jdbc:mysql://localhost/mySql");     
56.   
57.       element.element("db").element("driver").setText("com.mysql.jdbc.Driver");     
58.   
59.       element.element("db").element("user").setText("root");     
60.   
61.       element.element("db").element("password").setText("xlc");     
62.   
63.            
64.   
65.       // 设置输出格式     
66.   
67. outFmt = new OutputFormat("    ", true);     
68.   
69.       outFmt.setEncoding("UTF-8");     
70.   
71.            
72.   
73. xmlWriter=new XMLWriter(new FileWriter("domdb-modified.xml"),outFmt);     
74.   
75.       xmlWriter.write(document);     
76.   
77.       xmlWriter.flush();     
78.   
79.       xmlWriter.close();     
80.   
81.       return document;     
82.   
83.     }     
84.   
85.     catch (Exception e)     
86.   
87.     {     
88.   
89.       System.out.println(e.getMessage());     
90.   
91.       return null;     
92.   
93.     }     
94.   
95.   }     
96.   
97.     
98.   
99.   public static void main(String[] args) throws Exception     
100.   
101.   {     
102.   
103. dom4jParser = new Dom4jModify();     
104.   
105. document = dom4jParser.modifyDocument(new File("domdb.xml"));     
106.   
107.          
108.   
109. outFmt = new OutputFormat("    ", true);     
110.   
111.     outFmt.setEncoding("UTF-8");     
112.   
113. xmlWriter = new XMLWriter(System.out,outFmt);     
114.   
115.     xmlWriter.write(document);     
116.   
117. xmlWriter.flush();     
118.   
119. xmlWriter.close();     
120.   
121. }     
122.   
123. }