首页 > 代码库 > 解析XML方法对比和汇总

解析XML方法对比和汇总

 

  作为一种项目中最常用的一种文件格式,XML的重要性不言而喻。而对XML的解析也就成为了一个很具有意义的知识点,这里分享一下解析XML的三种方式——DOM,Dom4j,JDom。


 1、DOM

  DOM 是用与平台和语言无关的方式表示 XML 文档的官方 W3C 标准。DOM是以层次结构组织的节点或信息片断的集合。这个层次结构允许开发人员在树中寻找特定信息。分析该结构通常需要加载整个文档和构造层次结构,然后才能做任何工作。由于它是基于信息层次的,因而DOM 被认为是基于树或基于对象的。DOM 以及广义的基于树的处理具有几个优点。 

 2、JDOM 

  JDOM的目的是成为 Java 特定文档模型,它简化与 XML 的交互并且比使用 DOM 实现更快。由于是第一个 Java 特定模型,JDOM 一直得到大力推广和促进。
     JDOM 与 DOM 主要有两方面不同。

  a)JDOM 仅使用具体类而不使用接口。这在某些方面简化了 API,但是也限制了灵活性。 

  b)API 大量使用了 Collections 类,简化了那些已经熟悉这些类的 Java 开发者的使用。

 3、Dom4j

  Dom4J,这个在DRP中介绍并使用的,对于学过DRP的显然很熟悉了。Dom4J 使用了大量的接口和抽象基本类方法。Dom4J大量使用了 API 中的 Collections 类,但是在许多情况下,它还提供一些替代方法以允许更好的性能或更直接的编码方法。直接好处是,虽然Dom4J付出了更复杂的 API 的代价,但是它提供了比 JDom大得多的灵活性。
    

 (附)SAX

  SAX处理的优点非常类似于流媒体的优点。分析能够立即开始,而不是等待所有的数据被处理。而且,由于应用程序只是在读取数据时检查数据,因此不需要将数据存储在内存中。这对于大型文档来说是个巨大的优点。事实上,应用程序甚至不必解析整个文档;它可以在某个条件得到满足时停止解析。一般来说,SAX 还比它的替代者 DOM 快许多。说白了,SAX更适合大型文档的解析。


  具体实例:


XML文件:

<span style="font-family:KaiTi_GB2312;font-size:18px;"><?xml version="1.0" encoding="GB2312"?> 
<RESULT> 
<VALUE> 
   <NO>A1234</NO> 
   <ADDR>XX号</ADDR> 
</VALUE> 
<VALUE> 
   <NO>B1234</NO> 
   <ADDR>XX组</ADDR> 
</VALUE> 
</RESULT></span>



采用dom解析



<span style="font-size:18px;">import java.io.*; 
import java.util.*; 
import org.w3c.dom.*; 
import javax.xml.parsers.*; 
public class MyXMLReader{ 
 public static void main(String arge[]){ 
  long lasting =System.currentTimeMillis(); 
  try{ 
   File f=new File("data_10k.xml"); 
   DocumentBuilderFactory factory=DocumentBuilderFactory.newInstance(); 
   DocumentBuilder builder=factory.newDocumentBuilder(); 
   Document doc = builder.parse(f); 
   NodeList nl = doc.getElementsByTagName("VALUE"); 
   for (int i=0;i<nl.getLength();i++){ 
    System.out.print("车牌号码:" + doc.getElementsByTagName("NO").item(i).getFirstChild().getNodeValue()); 
    System.out.println("车主地址:" + doc.getElementsByTagName("ADDR").item(i).getFirstChild().getNodeValue()); 
   } 
  }catch(Exception e){ 
   e.printStackTrace(); 
} </span>



采用Jdom




import java.io.*; 
import java.util.*; 
import org.w3c.dom.*; 
import javax.xml.parsers.*; 
public class MyXMLReader{ 
 public static void main(String arge[]){ 
  long lasting =System.currentTimeMillis(); 
  try{ 
   File f=new File("data_10k.xml"); 
   DocumentBuilderFactory factory=DocumentBuilderFactory.newInstance(); 
   DocumentBuilder builder=factory.newDocumentBuilder(); 
   Document doc = builder.parse(f); 
   NodeList nl = doc.getElementsByTagName("VALUE"); 
   for (int i=0;i<nl.getLength();i++){ 
    System.out.print("车牌号码:" + doc.getElementsByTagName("NO").item(i).getFirstChild().getNodeValue()); 
    System.out.println("车主地址:" + doc.getElementsByTagName("ADDR").item(i).getFirstChild().getNodeValue()); 
   } 
  }catch(Exception e){ 
   e.printStackTrace(); 
} 



采用Dom4j



import java.io.*; 
import java.util.*; 
import org.dom4j.*; 
import org.dom4j.io.*; 
public class MyXMLReader { 
 public static void main(String arge[]) { 
  long lasting = System.currentTimeMillis(); 
  try { 
   File f = new File("data_10k.xml"); 
   SAXReader reader = new SAXReader(); 
   Document doc = reader.read(f); 
   Element root = doc.getRootElement(); 
   Element foo; 
   for (Iterator i = root.elementIterator("VALUE"); i.hasNext() { 
    foo = (Element) i.next(); 
    System.out.print("车牌号码:" + foo.elementText("NO")); 
    System.out.println("车主地址:" + foo.elementText("ADDR")); 
   } 
  } catch (Exception e) { 
   e.printStackTrace(); 
} 
) 



小结:

  1)、dom是解析XML的最基础的底层接口,SAX是另一种;

  2)、dom4j和Jdom都是基于dom的再封装,两者是专门针对java而进行实现的;

    3)、dom4j和Jdom两者封装的程度不尽相同,这也是导致两者差异性的原因。其中dom4j之所以比Jdom更广泛的得到试用,是因为dom4j更多的接口和抽象类,这样虽然比Jdom复杂,但是提供了更大的灵活性,符合我们“面向接口编程的思想”,而Jdom则更多提供的是一种具体的实现和类。

  

解析XML方法对比和汇总