解析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文件

  1. <span style="font-family:KaiTi_GB2312;font-size:18px;"><?xml version="1.0" encoding="GB2312"?>
  2. <RESULT>
  3. <VALUE>
  4.    <NO>A1234</NO>
  5.    <ADDR>XX号</ADDR>
  6. </VALUE>
  7. <VALUE>
  8.    <NO>B1234</NO>
  9.    <ADDR>XX组</ADDR>
  10. </VALUE>
  11. </RESULT></span>



采用dom解析



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



采用Jdom




  1. import java.io.*;
  2. import java.util.*;
  3. import org.jdom.*;
  4. import org.jdom.input.*;
  5. public class MyXMLReader {
  6.  public static void main(String arge[]) {
  7.   long lasting = System.currentTimeMillis();
  8.   try {
  9.    SAXBuilder builder = new SAXBuilder();
  10.    Document doc = builder.build(new File("data_10k.xml"));
  11.    Element foo = doc.getRootElement();
  12.    List allChildren = foo.getChildren();
  13.    for(int i=0;iallChildren.size();i++) {
  14.     System.out.print("车牌号码:" + ((Element)allChildren.get(i)).getChild("NO").getText());
  15.     System.out.println("车主地址:" + ((Element)allChildren.get(i)).getChild("ADDR").getText());
  16.    }
  17.   } catch (Exception e) {
  18.    e.printStackTrace();
  19. }
  20. }



采用Dom4j



  1. import java.io.*;
  2. import java.util.*;
  3. import org.dom4j.*;
  4. import org.dom4j.io.*;
  5. public class MyXMLReader {
  6.  public static void main(String arge[]) {
  7.   long lasting = System.currentTimeMillis();
  8.   try {
  9.    File f = new File("data_10k.xml");
  10.    SAXReader reader = new SAXReader();
  11.    Document doc = reader.read(f);
  12.    Element root = doc.getRootElement();
  13.    Element foo;
  14.    for (Iterator i = root.elementIterator("VALUE"); i.hasNext() {
  15.     foo = (Element) i.next();
  16.     System.out.print("车牌号码:" + foo.elementText("NO"));
  17.     System.out.println("车主地址:" + foo.elementText("ADDR"));
  18.    }
  19.   } catch (Exception e) {
  20.    e.printStackTrace();
  21. }
  22. )



小结:

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

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

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

猜你在找的XML相关文章