DIV CSS 佈局教程網

 DIV+CSS佈局教程網 >> 網頁腳本 >> XML學習教程 >> XML詳解 >> xml的解析處理以及其他
xml的解析處理以及其他
編輯:XML詳解     
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在處理字符串的大量處理上有優勢


 

XML學習教程| jQuery入門知識| AJAX入門| Dreamweaver教程| Fireworks入門知識| SEO技巧| SEO優化集錦|
Copyright © DIV+CSS佈局教程網 All Rights Reserved