test.xml文件

Xml代码
  1. <?xml version="1.0" encoding="UTF-8"?>     
  2. <HD>     
  3.   <disk name="C">     
  4.     <capacity>8G</capacity>     
  5.     <directories>200</directories>     
  6.     <files>1580</files>     
  7.   </disk>     
  8.     
  9.   <disk name="D">     
  10.     <capacity>10G</capacity>     
  11.     <directories>500</directories>     
  12.     <files>3000</files>     
  13.   </disk>     
  14. </HD>   

   

第一种,利用dom方式解析xml 文件,无需jar包

Java代码
  1. package Dom;  
  2. import javax.xml.parsers.DocumentBuilder;  
  3. import javax.xml.parsers.DocumentBuilderFactory;  
  4. import org.w3c.dom.Document;  
  5. import org.w3c.dom.Element;  
  6. import org.w3c.dom.NodeList;  
  7.   
  8. public class DomXML {  
  9.       
  10.     public static void main(String[] args)throws Exception {  
  11.         //得到DOM解析器的工厂实例  
  12.         DocumentBuilderFactory dbFactory = DocumentBuilderFactory.newInstance();  
  13.         //从DOM工厂中获得DOM解析器  
  14.         DocumentBuilder dbBuilder = dbFactory.newDocumentBuilder();  
  15.         //声明为File为了识别中文名  
  16.         Document doc = null;  
  17.         doc = dbBuilder.parse("F:/work_sapce_petroskill/Spring/src/Dom/test.xml");  
  18.           
  19.         //得到文档名称为Student的元素的节点列表  
  20.         NodeList list = doc.getElementsByTagName("disk");  
  21.           
  22.         //遍历该集合,显示结合中的元素及其子元素的名字  
  23.         for(int i = 0; i< list.getLength() ; i ++){  
  24.             Element element = (Element)list.item(i);  
  25.             String name=element.getAttribute("name");  
  26.             String capacity=element.getElementsByTagName("capacity").item(0).getFirstChild().getNodeValue();  
  27.             String directories=element.getElementsByTagName("directories").item(0).getFirstChild().getNodeValue();  
  28.             String files=element.getElementsByTagName("files").item(0).getFirstChild().getNodeValue();  
  29.             System.out.println("磁盘信息:");   
  30.             System.out.println("分区盘符:"+name);   
  31.             System.out.println("分区容量:"+capacity);   
  32.             System.out.println("目录数:"+directories);   
  33.             System.out.println("文件数:"+files);   
  34.             System.out.println("-----------------------------------");   
  35.         }        
  36.     }  
  37.  }  

 

输出结果为:

Xml代码
  1. 磁盘信息:  
  2. 分区盘符:C  
  3. 分区容量:8G  
  4. 目录数:200  
  5. 文件数:1580  
  6. -----------------------------------  
  7. 磁盘信息:  
  8. 分区盘符:D  
  9. 分区容量:10G  
  10. 目录数:500  
  11. 文件数:3000  
  12. -----------------------------------  

  

第二种,利用Jdom方式解析xml文件,需要下载jdom.jar(见附件)

 

Java代码
  1. package Dom;  
  2. import java.util.List;  
  3.   
  4. import org.jdom.Document;  
  5. import org.jdom.Element;  
  6. import org.jdom.input.SAXBuilder;  
  7. public class JDomXML {   
  8.   public static void main(String[] args) throws Exception{    
  9.     SAXBuilder sb=new SAXBuilder();   
  10.     Document doc=sb.build(Dom4jXML.class.getClassLoader().getResourceAsStream("Dom/test.xml")); //构造文档对象  
  11.     Element root=doc.getRootElement(); //获取根元素  
  12.     List list=root.getChildren("disk");//取名字为disk的所有元素   
  13.     for(int i=0;i<list.size();i++){   
  14.        Element element=(Element)list.get(i);   
  15.        String name=element.getAttributeValue("name");   
  16.        String capacity=element.getChildText("capacity");//取disk子元素capacity的内容   
  17.        String directories=element.getChildText("directories");   
  18.        String files=element.getChildText("files");   
  19.        System.out.println("磁盘信息:");   
  20.        System.out.println("分区盘符:"+name);   
  21.        System.out.println("分区容量:"+capacity);   
  22.        System.out.println("目录数:"+directories);   
  23.        System.out.println("文件数:"+files);   
  24.        System.out.println("-----------------------------------");   
  25.     }     
  26.   }   
  27. }   

 

 

输出结果为:

Xml代码
  1. 磁盘信息:  
  2. 分区盘符:C  
  3. 分区容量:8G  
  4. 目录数:200  
  5. 文件数:1580  
  6. -----------------------------------  
  7. 磁盘信息:  
  8. 分区盘符:D  
  9. 分区容量:10G  
  10. 目录数:500  
  11. 文件数:3000  
  12. -----------------------------------  

 

第三种,利用dom4j方式解析xml文件,需要下载 dom4j-1.6.1.jar(见附件)

Java代码
  1. package Dom;  
  2. import java.util.Iterator;  
  3. import org.dom4j.Document;  
  4. import org.dom4j.Element;  
  5. import org.dom4j.io.SAXReader;  
  6.   
  7. public class Dom4jXML{     
  8.    public static void main(String[] args) throws Exception {  
  9.       
  10.         //创建文件对象     
  11.         java.io.File file=new java.io.File("F:/workSapce/javaXML/src/Dom/test.xml");     
  12.         //创建一个读取XML文件的对象     
  13.         SAXReader reader=new SAXReader();     
  14.         //创建一个文档对象     
  15.         Document document=reader.read(file);     
  16.         //获取文件的根节点     
  17.         Element element=document.getRootElement();  
  18.         for(Iterator i=element.elementIterator("disk");i.hasNext();){  
  19.             //获取节点元素     
  20.             element=(Element)i.next();  
  21.             String name=element.attributeValue("name");  
  22.             String capacity=element.elementText("capacity");//取disk子元素capacity的内容   
  23.             String directories=element.elementText("directories");   
  24.             String files=element.elementText("files");   
  25.             System.out.println("磁盘信息:");   
  26.             System.out.println("分区盘符:"+name);   
  27.             System.out.println("分区容量:"+capacity);   
  28.             System.out.println("目录数:"+directories);   
  29.             System.out.println("文件数:"+files);   
  30.             System.out.println("-----------------------------------");   
  31.         }     
  32.     }     
  33. }    
  34.          

 

输出结果为:

Xml代码
  1. 磁盘信息:  
  2. 分区盘符:C  
  3. 分区容量:8G  
  4. 目录数:200  
  5. 文件数:1580  
  6. -----------------------------------  
  7. 磁盘信息:  
  8. 分区盘符:D  
  9. 分区容量:10G  
  10. 目录数:500  
  11. 文件数:3000  
  12. -----------------------------------  

 

 

总结:DOM4J性能最好

           小文档情况下还值得考虑使用DOM和JDOM


(有附件)原文链接:http://lhkzyz.iteye.com/blog/1681905

欢迎留言