国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 開發 > XML > 正文

解析xml的處理以及其他

2024-09-05 20:54:52
字體:
來源:轉載
供稿:網友
dom和SAX使兩種主流的選擇,還有JDOM,DOM4J做的不錯。

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

例: 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();

  }

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

例: 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);}}

  注意:當xml數據的形式作為傳遞時,要獲取一條條的紀錄是比較適宜于采用dom,雖然它對系統(內存,性能等)有較高的要求,但是一般的服務器都可滿足上G的xml文檔的處理。

當需要對xml的某些內容或某些節點的特定訪問時,或需要一及時地事件相應時,可以用sax來處理。它是基于時間處理機制的,在編程時,通過重載一些事件方法,來獲得對xml文檔的處理。

  有關xml的編碼,InputStreamReader和xmlReader的關系:

   通常的DOM和SAX對于用ascii編碼的文檔,通過用InputStreamReader讀入xml文檔,后變成了unicode碼,然后不能用 XMlREader來處理,出現錯誤的原因是:遇到無效的unicode的字符。(當你用system.out.println()輸出是沒有任何問題,因為它能自動轉成本地機的編碼)。

解決的方法:

BufferedReader br=new BufferedReader(new InputStreamReader(new FileInputStream(f),"ISO8859-1"));

這樣就可以限定它的編碼,這樣就沒有問題。

  String 的長度問題:String 類型安標準來說沒有長度限制,但是一般jdk中String的最大長度是4G。

  String與BufferedString關系:在不涉及到字符串有效的大量處理,通常使用String. BufferedString在處理字符串的大量處理上有優勢

 

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 丹凤县| 西平县| 防城港市| 县级市| 威信县| 普定县| 苏尼特左旗| 凌云县| 大丰市| 清镇市| 樟树市| 札达县| 吐鲁番市| 靖边县| 济宁市| 集安市| 康保县| 宝坻区| 汕尾市| 石台县| 寻甸| 青田县| 达孜县| 陇川县| 图木舒克市| 安宁市| 永和县| 揭东县| 昭通市| 宿松县| 五大连池市| 安泽县| 天水市| 长岭县| 岑巩县| 呼和浩特市| 龙陵县| 洛南县| 永德县| 常宁市| 隆安县|