dom4j解析xml(记录)

DOM4J是dom4j.org出品的一个开源XML解析包。Dom4j是一个易用的、开源的库,用于XML,XPath和XSLT。它应用于Java平台,采用了Java集合框架并完全支持DOM,SAX和JAXP。Hibernate也是用它来读写配置文件的。  
  
一、DOM4j的下载  
dom4j-1.6.1.jar 下载:http://sourceforge.net/directory/os:windows/freshness:recently-updated/?q=dom4j  
  
二、DOM4j解析XML文件
AirPortLine.xml文件如下:
[html]  view plain copy
  1. <?xml version="1.0" encoding="UTF-8"?>      
  2. <AirPortLine>      
  3.     <line lid="MU2480" num="3">      
  4.         <id>1</id>      
  5.         <station>      
  6.             <sid>1</sid>      
  7.             <sname>武汉</sname>      
  8.         </station>      
  9.         <station>      
  10.             <sid>2</sid>      
  11.             <sname>石家庄</sname>      
  12.         </station>      
  13.         <station>      
  14.             <sid>3</sid>      
  15.             <sname>北京</sname>      
  16.         </station>      
  17.     </line>      
  18.     <line lid="MU2483" num="4">      
  19.         <id>2</id>      
  20.         <station>      
  21.             <sid>1</sid>      
  22.             <sname>重庆</sname>      
  23.         </station>      
  24.         <station>      
  25.             <sid>2</sid>      
  26.             <sname>武汉</sname>      
  27.         </station>      
  28.         <station>      
  29.             <sid>3</sid>      
  30.             <sname>上海</sname>      
  31.         </station>      
  32.         <station>      
  33.             <sid>4</sid>      
  34.             <sname>东京</sname>      
  35.         </station>      
  36.     </line>      
  37.     <line lid="MU2485" num="2">      
  38.         <id>3</id>      
  39.         <station>      
  40.             <sid>1</sid>      
  41.             <sname>上海</sname>      
  42.         </station>      
  43.         <station>      
  44.             <sid>2</sid>      
  45.             <sname>纽约</sname>      
  46.         </station>      
  47.     </line>      
  48. </AirPortLine>    
Java DOM4J解析XML代码如下:
[java]  view plain copy
  1. package com.hsinghsu.testXML;    
  2.     
  3. import java.io.File;    
  4. import java.util.Iterator;    
  5.     
  6. import org.dom4j.Attribute;    
  7. import org.dom4j.Document;    
  8. import org.dom4j.DocumentException;    
  9. import org.dom4j.DocumentHelper;    
  10. import org.dom4j.Element;    
  11. import org.dom4j.io.SAXReader;    
  12.     
  13. public class testDOM4J {    
  14.     
  15.     public static void main(String[] args) {    
  16.     
  17.         try {    
  18.             File file = new File("AirPortLine.xml");    
  19.             SAXReader reader = new SAXReader();    
  20.             Document doc = reader.read(file);    
  21.     
  22.             parseDOM4J(doc);// 解析XML文档    
  23.     
  24.             //String xmlStr = getStringFromXML(doc);// 将XML文档转换为String    
  25.             //System.out.println("xmlStr:" + xmlStr);    
  26.     
  27.             //String str = "<?xml version='1.0' encoding='UTF-8'?><AirPortLine><line lid='MU2480' num='3'><id>1</id><station><sid>1</sid><sname>武汉</sname></station><station><sid>2</sid><sname>石家庄</sname></station><station><sid>3</sid><sname>北京</sname></station></line><line lid='MU2482' num='4'><id>2</id><station><sid>1</sid><sname>重庆</sname></station><station><sid>2</sid><sname>武汉</sname></station><station><sid>3</sid><sname>上海</sname></station><station><sid>4</sid><sname>东京</sname></station></line><line lid='MU2483' num='2'><id>3</id><station><sid>1</sid><sname>上海</sname></station><station><sid>2</sid><sname>纽约</sname></station></line></AirPortLine>";    
  28.             //Document document = getXMLDocFromString(str);// 将String转换为XML文档    
  29.     
  30.         } catch (Exception e) {    
  31.             System.out.println("Can't read the file");    
  32.         }    
  33.     }   
  34.   
  35.     // 解析XML文档    
  36.     private static void parseDOM4J(Document doc) {    
  37.         Element root = doc.getRootElement();    
  38.         for (Iterator iter = root.elementIterator("line"); iter.hasNext();) {// 遍历line结点的所有子节点,也可以使用root.elementIterator()    
  39.             Element element = (Element) iter.next();    
  40.         
  41.             Attribute lidAttr = element.attribute("lid");// 获取<line>元素的属性    
  42.             String lid = lidAttr.getValue();// 获取<line>元素的属性值    
  43.             Attribute numAttr = element.attribute("num");// 获取<line>元素的属性    
  44.             String num = numAttr.getValue();// 获取<line>元素的属性值    
  45.         
  46.             String id = element.elementText("id");// 获取<line>元素下<id></id>的值    
  47.         
  48.             System.out.println("==lid:" + lid);    
  49.             System.out.println("==num:" + num);    
  50.             System.out.println("==路线id:" + id);    
  51.         
  52.             for (Iterator iterInner = element.elementIterator("station"); iterInner.hasNext();) { // 遍历station结点的所有子节点    
  53.                 Element elementInner = (Element) iterInner.next();    
  54.         
  55.                 String sid = elementInner.elementText("sid");// 获取<station>元素下<sid></sid>的值    
  56.                 String sname = elementInner.elementText("sname");// 获取<station>元素下<sname></sname>的值    
  57.         
  58.                 System.out.println("----站--sid:" + sid);    
  59.                 System.out.println("----站--sname:" + sname);    
  60.             }    
  61.         
  62.         }    
  63.     }    
  64.     
  65.     // 将XML文档转换为String    
  66.     private static String getStringFromXML(Document doc) {    
  67.         return doc.asXML();    
  68.     }    
  69.         
  70.     // 将String转换为XML文档    
  71.     private static Document getXMLDocFromString(String str) {    
  72.         try {    
  73.             return DocumentHelper.parseText(str);    
  74.         } catch (DocumentException e) {    
  75.             e.printStackTrace();    
  76.             return null;    
  77.         }    
  78.     
  79. }    
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值