婷婷综合国产,91蜜桃婷婷狠狠久久综合9色 ,九九九九九精品,国产综合av

主頁 > 知識庫 > Java中四種XML解析技術

Java中四種XML解析技術

熱門標簽:怎樣把地圖標注出來 地圖標注人員兼職 淮南騰訊地圖標注 騰訊地圖標注商戶改名注冊入駐 開封便宜外呼系統報價 商丘百應電話機器人有沒有效果 漯河辦理400電話 黃石智能營銷電銷機器人效果 電話機器人的特色和創新

  在平時工作中,難免會遇到把 XML 作為數據存儲格式。面對目前種類繁多的解決方案,哪個最適合我們呢?在這篇文章中,我對這四種主流方案做一個不完全評測,僅僅針對遍歷 XML 這塊來測試,因為遍歷 XML 是工作中使用最多的(至少我認為)。

  預 備

  測試環境:

  AMD 毒龍1.4G OC 1.5G、256M DDR333、Windows2000 Server SP4、Sun JDK 1.4.1+Eclipse 2.1+Resin 2.1.8,在 Debug 模式下測試。

  XML 文件格式如下:

  <?xml version="1.0" encoding="GB2312"?>
  <RESULT>
  <VALUE>
  <NO>A1234</NO>
  <ADDR>四川省XX縣XX鎮XX路X段XX號</ADDR>
  </VALUE>
  <VALUE>
  <NO>B1234</NO>
  <ADDR>四川省XX市XX鄉XX村XX組</ADDR>
  </VALUE>
  </RESULT>

  測試方法:

  采用 JSP 端調用Bean(至于為什么采用JSP來調用,請參考:http://blog.csdn.net/rosen/archive/2004/10/15/138324.aspx),讓每一種方案分別解析10K、100K、1000K、10000K的 XML 文件,計算其消耗時間(單位:毫秒)。

  JSP 文件:

  <%@ page contentType="text/html; charset=gb2312" %>
  <%@ page import="com.test.*"%>

  <html>
  <body>
  <%
  String args[]={""};
  MyXMLReader.main(args);
  %>
  </body>
  </html>

  測 試

  首先出場的是 DOM(JAXP Crimson 解析器)

  DOM 是用與平臺和語言無關的方式表示 XML 文檔的官方 W3C 標準。DOM 是以層次結構組織的節點或信息片斷的集合。這個層次結構允許開發人員在樹中尋找特定信息。分析該結構通常需要加載整個文檔和構造層次結構,然后才能做任何工作。由于它是基于信息層次的,因而 DOM 被認為是基于樹或基于對象的。DOM 以及廣義的基于樹的處理具有幾個優點。首先,由于樹在內存中是持久的,因此可以修改它以便應用程序能對數據和結構作出更改。它還可以在任何時候在樹中上下導航,而不是像 SAX 那樣是一次性的處理。DOM 使用起來也要簡單得多。

  另一方面,對于特別大的文檔,解析和加載整個文檔可能很慢且很耗資源,因此使用其他手段來處理這樣的數據會更好。這些基于事件的模型,比如 SAX。

  Bean文件:

  package com.test;

  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();
  }
  System.out.println("運行時間:"+(System.currentTimeMillis() - lasting)+" 毫秒");
  }
  }


  10k消耗時間:265 203 219 172
  100k消耗時間:9172 9016 8891 9000
  1000k消耗時間:691719 675407 708375 739656
  10000k消耗時間:OutOfMemoryError

  接著是 SAX

  這種處理的優點非常類似于流媒體的優點。分析能夠立即開始,而不是等待所有的數據被處理。而且,由于應用程序只是在讀取數據時檢查數據,因此不需要將數據存儲在內存中。這對于大型文檔來說是個巨大的優點。事實上,應用程序甚至不必解析整個文檔;它可以在某個條件得到滿足時停止解析。一般來說,SAX 還比它的替代者 DOM 快許多。

   選擇 DOM 還是選擇 SAX ?

  對于需要自己編寫代碼來處理 XML 文檔的開發人員來說,選擇 DOM 還是 SAX 解析模型是一個非常重要的設計決策。

  DOM 采用建立樹形結構的方式訪問 XML 文檔,而 SAX 采用的事件模型。

  DOM 解析器把 XML 文檔轉化為一個包含其內容的樹,并可以對樹進行遍歷。用 DOM 解析模型的優點是編程容易,開發人員只需要調用建樹的指令,然后利用navigation APIs訪問所需的樹節點來完成任務。可以很容易的添加和修改樹中的元素。然而由于使用 DOM 解析器的時候需要處理整個 XML 文檔,所以對性能和內存的要求比較高,尤其是遇到很大的 XML 文件的時候。由于它的遍歷能力,DOM 解析器常用于 XML 文檔需要頻繁的改變的服務中。

  SAX 解析器采用了基于事件的模型,它在解析 XML 文檔的時候可以觸發一系列的事件,當發現給定的tag的時候,它可以激活一個回調方法,告訴該方法制定的標簽已經找到。SAX 對內存的要求通常會比較低,因為它讓開發人員自己來決定所要處理的tag。特別是當開發人員只需要處理文檔中所包含的部分數據時,SAX 這種擴展能力得到了更好的體現。但用 SAX 解析器的時候編碼工作會比較困難,而且很難同時訪問同一個文檔中的多處不同數據。

  Bean文件:

  package com.test;
  import org.xml.sax.*;
  import org.xml.sax.helpers.*;
  import javax.xml.parsers.*;

  public class MyXMLReader extends DefaultHandler {

  java.util.Stack tags = new java.util.Stack();

  public MyXMLReader() {
  super();
  }

  public static void main(String args[]) {
  long lasting = System.currentTimeMillis();
  try {
   SAXParserFactory sf = SAXParserFactory.newInstance();
   SAXParser sp = sf.newSAXParser();
   MyXMLReader reader = new MyXMLReader();
   sp.parse(new InputSource("data_10k.xml"), reader);
  } catch (Exception e) {
   e.printStackTrace();
  }
  System.out.println("運行時間:" + (System.currentTimeMillis() - lasting) + " 毫秒");
  }

  public void characters(char ch[], int start, int length) throws SAXException {
  String tag = (String) tags.peek();
  if (tag.equals("NO")) {
   System.out.print("車牌號碼:" + new String(ch, start, length));
  }
  if (tag.equals("ADDR")) {
  System.out.println(" 地址:" + new String(ch, start, length));
  }
  }

  public void startElement(
  String uri,
  String localName,
  String qName,
  Attributes attrs) {
  tags.push(qName);
  }
  }

  10k消耗時間:110 47 109 78
  100k消耗時間:344 406 375 422
  1000k消耗時間:3234 3281 3688 3312
  10000k消耗時間:32578 34313 31797 31890 30328

  然后是 JDOM http://www.jdom.org/

  JDOM 的目的是成為 Java 特定文檔模型,它簡化與 XML 的交互并且比使用 DOM 實現更快。由于是第一個 Java 特定模型,JDOM 一直得到大力推廣和促進。正在考慮通過“Java 規范請求 JSR-102”將它最終用作“Java 標準擴展”。從 2000 年初就已經開始了 JDOM 開發。

  JDOM 與 DOM 主要有兩方面不同。首先,JDOM 僅使用具體類而不使用接口。這在某些方面簡化了 API,但是也限制了靈活性。第二,API 大量使用了 Collections 類,簡化了那些已經熟悉這些類的 Java 開發者的使用。

  JDOM 文檔聲明其目的是“使用 20%(或更少)的精力解決 80%(或更多)Java/XML 問題”(根據學習曲線假定為 20%)。JDOM 對于大多數 Java/XML 應用程序來說當然是有用的,并且大多數開發者發現 API 比 DOM 容易理解得多。JDOM 還包括對程序行為的相當廣泛檢查以防止用戶做任何在 XML 中無意義的事。然而,它仍需要您充分理解 XML 以便做一些超出基本的工作(或者甚至理解某些情況下的錯誤)。這也許是比學習 DOM 或 JDOM 接口都更有意義的工作。

  JDOM 自身不包含解析器。它通常使用 SAX2 解析器來解析和驗證輸入 XML 文檔(盡管它還可以將以前構造的 DOM 表示作為輸入)。它包含一些轉換器以將 JDOM 表示輸出成 SAX2 事件流、DOM 模型或 XML 文本文檔。JDOM 是在 Apache 許可證變體下發布的開放源碼。

  Bean文件:

  package com.test;

  import java.io.*;
  import java.util.*;
  import org.jdom.*;
  import org.jdom.input.*;

  public class MyXMLReader {

  public static void main(String arge[]) {
  long lasting = System.currentTimeMillis();
  try {
   SAXBuilder builder = new SAXBuilder();
   Document doc = builder.build(new File("data_10k.xml"));
   Element foo = doc.getRootElement();
   List allChildren = foo.getChildren();
   for(int i=0;i<allChildren.size();i++) {
    System.out.print("車牌號碼:" + ((Element)allChildren.get(i)).getChild("NO").getText());
    System.out.println(" 車主地址:" + ((Element)allChildren.get(i)).getChild("ADDR").getText());
   }
  } catch (Exception e) {
   e.printStackTrace();
  }
  System.out.println("運行時間:" + (System.currentTimeMillis() - lasting) + " 毫秒");
  }
  }

  10k消耗時間:125 62 187 94
  100k消耗時間:704 625 640 766
  1000k消耗時間:27984 30750 27859 30656
  10000k消耗時間:OutOfMemoryError

  最后是 DOM4J http://dom4j.sourceforge.net/

  雖然 DOM4J 代表了完全獨立的開發結果,但最初,它是 JDOM 的一種智能分支。它合并了許多超出基本 XML 文檔表示的功能,包括集成的 XPath 支持、XML Schema 支持以及用于大文檔或流化文檔的基于事件的處理。它還提供了構建文檔表示的選項,它通過 DOM4J API 和標準 DOM 接口具有并行訪問功能。從 2000 下半年開始,它就一直處于開發之中。

  為支持所有這些功能,DOM4J 使用接口和抽象基本類方法。DOM4J 大量使用了 API 中的 Collections 類,但是在許多情況下,它還提供一些替代方法以允許更好的性能或更直接的編碼方法。直接好處是,雖然 DOM4J 付出了更復雜的 API 的代價,但是它提供了比 JDOM 大得多的靈活性。

  在添加靈活性、XPath 集成和對大文檔處理的目標時,DOM4J 的目標與 JDOM 是一樣的:針對 Java 開發者的易用性和直觀操作。它還致力于成為比 JDOM 更完整的解決方案,實現在本質上處理所有 Java/XML 問題的目標。在完成該目標時,它比 JDOM 更少強調防止不正確的應用程序行為。

  DOM4J 是一個非常非常優秀的Java XML API,具有性能優異、功能強大和極端易用使用的特點,同時它也是一個開放源代碼的軟件。如今你可以看到越來越多的 Java 軟件都在使用 DOM4J 來讀寫 XML,特別值得一提的是連 Sun 的 JAXM 也在用 DOM4J。

  Bean文件:

  package com.test;

  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();
  }
  System.out.println("運行時間:" + (System.currentTimeMillis() - lasting) + " 毫秒");
  }
  }

  10k消耗時間:109 78 109 31
  100k消耗時間:297 359 172 312
  1000k消耗時間:2281 2359 2344 2469
  10000k消耗時間:20938 19922 20031 21078

  JDOM 和 DOM 在性能測試時表現不佳,在測試 10M 文檔時內存溢出。在小文檔情況下還值得考慮使用 DOM 和 JDOM。雖然 JDOM 的開發者已經說明他們期望在正式發行版前專注性能問題,但是從性能觀點來看,它確實沒有值得推薦之處。另外,DOM 仍是一個非常好的選擇。DOM 實現廣泛應用于多種編程語言。它還是許多其它與 XML 相關的標準的基礎,因為它正式獲得 W3C 推薦(與基于非標準的 Java 模型相對),所以在某些類型的項目中可能也需要它(如在 JavaScript 中使用 DOM)。

  SAX表現較好,這要依賴于它特定的解析方式。一個 SAX 檢測即將到來的XML流,但并沒有載入到內存(當然當XML流被讀入時,會有部分文檔暫時隱藏在內存中)。

  無疑,DOM4J是這場測試的獲勝者,目前許多開源項目中大量采用 DOM4J,例如大名鼎鼎的 Hibernate 也用 DOM4J 來讀取 XML 配置文件。如果不考慮可移植性,那就采用DOM4J吧!

您可能感興趣的文章:
  • Java UrlRewriter偽靜態技術運用深入分析
  • Java實現遠程控制技術完整源代碼分享
  • 總結Java常用到的六個加密技術和代碼
  • 識別率很高的java文字識別技術
  • JAVA Web實時消息后臺服務器推送技術---GoEasy
  • 分頁技術原理與實現之Java+Oracle代碼實現分頁(二)
  • java的poi技術讀取和導入Excel實例
  • PHP、JAVA、.NET這三種技術的區別分析
  • JAVA使用JDBC技術操作SqlServer數據庫實例代碼
  • 你應該知道的21個Java核心技術

標簽:亳州 紅河 武威 拉薩 岳陽 大興安嶺 鄭州 馬鞍山

巨人網絡通訊聲明:本文標題《Java中四種XML解析技術》,本文關鍵詞  Java,中,四種,XML,解析,技術,;如發現本文內容存在版權問題,煩請提供相關信息告之我們,我們將及時溝通與處理。本站內容系統采集于網絡,涉及言論、版權與本站無關。
  • 相關文章
  • 下面列出與本文章《Java中四種XML解析技術》相關的同類信息!
  • 本頁收集關于Java中四種XML解析技術的相關信息資訊供網民參考!
  • 推薦文章
    婷婷综合国产,91蜜桃婷婷狠狠久久综合9色 ,九九九九九精品,国产综合av
    日韩一区二区高清| 在线中文字幕一区| 欧美一级片在线看| 成人国产电影网| 日本美女一区二区三区视频| 久久久久久久久一| 欧美中文一区二区三区| 岛国av在线一区| 美女一区二区三区| 亚洲综合一区在线| 国产精品嫩草久久久久| 亚洲精品一区二区三区蜜桃下载| 欧美日韩国产高清一区二区| 色狠狠一区二区三区香蕉| 成人毛片视频在线观看| 国产精品正在播放| 美国三级日本三级久久99| 一区二区三区高清在线| 亚洲色图另类专区| 自拍偷在线精品自拍偷无码专区 | 亚洲精品免费在线播放| 中文字幕av免费专区久久| 久久久www成人免费无遮挡大片| 欧美一区二区久久| 精品日韩一区二区三区| 精品国产91久久久久久久妲己 | 亚洲精品视频在线观看网站| 亚洲四区在线观看| 亚洲精品视频在线看| 一区二区高清视频在线观看| 国产精品你懂的| 国产精品高潮呻吟| 自拍偷拍亚洲欧美日韩| 亚洲最大成人网4388xx| 午夜视频在线观看一区二区 | 欧美一区日韩一区| 日本韩国一区二区| 欧美在线观看18| 欧美一级高清大全免费观看| 精品欧美久久久| 亚洲国产高清不卡| 亚洲一区二区影院| 爽好多水快深点欧美视频| 精品一区二区三区影院在线午夜 | 91麻豆.com| 国产综合色在线| 成人av电影观看| 欧美在线一区二区| 日韩女优电影在线观看| 国产色婷婷亚洲99精品小说| 曰韩精品一区二区| 日本伊人色综合网| 国产成人h网站| 欧美在线你懂的| 久久亚洲精品国产精品紫薇| 亚洲品质自拍视频| 免费在线观看精品| av午夜一区麻豆| 欧美日本在线视频| 久久久av毛片精品| 亚洲国产cao| 国模一区二区三区白浆| 国产精品中文欧美| 欧美精品一二三四| 1024成人网色www| 裸体歌舞表演一区二区| 91免费在线视频观看| 日韩美女视频在线| 亚洲人精品一区| 精品中文字幕一区二区小辣椒| 99国产精品久| 久久青草国产手机看片福利盒子| 亚洲自拍另类综合| 不卡一区二区三区四区| 欧美xfplay| 亚洲电影在线免费观看| 不卡的电视剧免费网站有什么| 欧美变态口味重另类| 天天av天天翘天天综合网 | 亚洲欧美日韩成人高清在线一区| 日韩成人精品在线| 91电影在线观看| 亚洲欧美福利一区二区| 国产美女视频91| 日韩欧美色电影| 亚洲高清中文字幕| 国产91丝袜在线18| 欧美精品一区二区三| 老色鬼精品视频在线观看播放| 欧美羞羞免费网站| 亚洲激情自拍偷拍| 色域天天综合网| 亚洲欧美自拍偷拍色图| aaa亚洲精品| 自拍视频在线观看一区二区| 成人黄色在线看| 久久久www成人免费毛片麻豆 | 久久综合九色综合欧美就去吻| 日韩福利视频导航| 欧美日韩亚洲综合在线 欧美亚洲特黄一级| 国产精品福利一区| 91蜜桃在线观看| 亚洲图片激情小说| 99精品久久99久久久久| 国精品**一区二区三区在线蜜桃 | 在线观看欧美黄色| 亚洲色图视频网站| 色狠狠色狠狠综合| 一区二区视频在线看| 在线免费观看日本一区| 亚洲动漫第一页| 欧美一区二区视频在线观看2022 | 日韩欧美一区二区久久婷婷| 秋霞午夜鲁丝一区二区老狼| 欧美大片拔萝卜| 狠狠色综合播放一区二区| 精品欧美一区二区久久| 国产成人av一区| 亚洲桃色在线一区| 6080亚洲精品一区二区| 麻豆视频观看网址久久| 久久久久国产精品厨房| 99精品一区二区| 亚洲精品成人精品456| 正在播放一区二区| 粉嫩嫩av羞羞动漫久久久| 一级精品视频在线观看宜春院| 欧美午夜不卡在线观看免费| 久久国产三级精品| 亚洲日本护士毛茸茸| 欧美精品乱人伦久久久久久| 久久99国产精品久久99| 亚洲欧洲在线观看av| 9191久久久久久久久久久| 性做久久久久久免费观看 | 亚洲欧美电影院| 4438x成人网最大色成网站| 美女高潮久久久| 国产精品久久久久久久久果冻传媒| 色欧美乱欧美15图片| 久久精品久久综合| 日韩伦理免费电影| 日韩视频一区在线观看| 色综合婷婷久久| 久国产精品韩国三级视频| 亚洲日本va午夜在线电影| 26uuu亚洲综合色欧美| 欧美三级视频在线观看| 高清在线成人网| 天天综合色天天综合| 亚洲欧洲日产国码二区| 精品少妇一区二区三区在线视频| 91免费国产视频网站| 成人丝袜高跟foot| 久久精品999| 亚洲一级二级在线| 一色屋精品亚洲香蕉网站| 国产日韩欧美在线一区| 欧美一区国产二区| 欧美日免费三级在线| 色哟哟一区二区| 成人丝袜18视频在线观看| 精品一区二区三区视频| 日韩中文字幕不卡| 亚洲一区二区三区四区五区黄| 国产精品另类一区| 国产女人aaa级久久久级| 欧美成人video| 色偷偷久久人人79超碰人人澡| 国产高清亚洲一区| 蜜臀av一区二区在线免费观看| 亚洲靠逼com| 亚洲丝袜精品丝袜在线| 亚洲精品免费播放| 丝袜美腿亚洲一区| 舔着乳尖日韩一区| 亚洲成人一二三| 一区二区三区波多野结衣在线观看 | 欧美精品一区二区三区久久久| 欧美性大战久久| 不卡一区二区三区四区| 成人av免费在线| 国产福利一区在线| 激情综合网最新| 黑人巨大精品欧美黑白配亚洲| 日韩精品欧美成人高清一区二区| 亚洲6080在线| 婷婷夜色潮精品综合在线| 婷婷激情综合网| 亚洲gay无套男同| 亚洲综合久久久| 一区二区三区在线免费播放| 亚洲码国产岛国毛片在线| 一级日本不卡的影视| 亚洲777理论| 日韩av不卡在线观看| 亚洲va韩国va欧美va| 另类的小说在线视频另类成人小视频在线 | 国产精品影视在线观看| 国产乱人伦精品一区二区在线观看|