激情欧美日韩一区二区,浪货撅高贱屁股求主人调教视频,精品无码成人片一区二区98,国产高清av在线播放,色翁荡息又大又硬又粗视频

XML認證知識點(diǎn):SAX Parser

時(shí)間:2024-07-13 12:40:50 IBM認證 我要投稿
  • 相關(guān)推薦

XML認證知識點(diǎn):SAX Parser

  讀取和操縱 XML(XML培訓 編程語(yǔ)言培訓 ) 文件的標準方法是 DOM(“文檔對象模型”)。遺憾的是,這種方法需要讀取整個(gè)文件并將它存儲到樹(shù)結構中,因而效率不高、緩慢,并且會(huì )過(guò)度使用資源。

XML認證知識點(diǎn):SAX Parser

  一種替代方法是使用 Simple API for XML 或 SAX。SAX 允許正在讀取文檔時(shí)處理該文檔,這避免了在采取操作之前需要等待存儲文檔的所有內容。

  SAX 是由 XML-DEV 郵件列表的成員開(kāi)發(fā)的,Java 版本由 David Megginson 維護。他們的目的是提供一種更自然的方法來(lái)使用 XML,這種方法不會(huì )涉及到使用 DOM 的那種開(kāi)銷(xiāo)。

  結果是基于事件的 API。解析器將事件(譬如,元素的開(kāi)始或結束)發(fā)送給處理信息的事件處理程序。然后,應用程序自己可以處理數據。雖然原始文檔保持不變,但 SAX 提供了操縱數據的方法,然后會(huì )將該方法導向另一個(gè)過(guò)程或文檔。

  對于 SAX,沒(méi)有官方的標準;萬(wàn)維網(wǎng)(W3C)或其它官方組織不維護 SAX,但在 XML 社區中,它是一個(gè)事實(shí)上的標準。

  SAX 處理是如何工作的

  SAX 分析經(jīng)過(guò)其的 XML 流,這非常象老式的自動(dòng)收報機紙條?紤]以下 XML 代碼片斷:

  UNIX

  color

  一般情況下,SAX 處理器分析這段代碼將生成以下事件:

  Start document

  Start element (samples)

  Characters (white space)

  Start element (server)

  Characters (UNIX)

  End element (server)

  Characters (white space)

  Start element (monitor)

  Characters (color)

  End element (monitor)

  Characters (white space)

  End element (samples)

  SAX API 允許開(kāi)發(fā)者捕獲這些事件,并對它們進(jìn)行操作。

  SAX 處理涉及以下幾步:

  創(chuàng )建事件處理程序。

  創(chuàng )建 SAX 解析器。

  將事件處理程序分配給解析器。

  對文檔進(jìn)行解析,將每個(gè)事件發(fā)送給處理程序。

  在SAX與DOM之間,如何選擇

  選擇 DOM 還是 SAX,這取決于幾個(gè)因素:

  應用程序的目的:如果必須對數據進(jìn)行更改,并且作為 XML 將它輸出,則在大多數情況下,使用 DOM。與使用 XSL 轉換來(lái)完成的簡(jiǎn)單結構更改不一樣,如果是對數據本身進(jìn)行更改,則尤其應該使用 DOM。

  數據的數量:對于大文件,SAX 是更好的選擇。

  將如何使用數據:如果實(shí)際上只使用一小部分數據,則使用 SAX 將數據抽取到應用程序中,這種方法更好些。另一方面,如果知道將需要向后引用已經(jīng)處理過(guò)的信息,則 SAX 可能不是正確的選擇。

  需要速度:通常,SAX 實(shí)現比 DOM 實(shí)現快。

  記住 SAX 和 DOM 不是互斥的,這一點(diǎn)很重要?梢允褂 DOM 來(lái)創(chuàng )建事件的 SAX 流,可以使用 SAX 來(lái)創(chuàng )建 DOM 樹(shù)。事實(shí)上,大多數解析器實(shí)際常常使用 SAX 來(lái)創(chuàng )建 DOM 樹(shù)!

  使用 JAXP 來(lái)創(chuàng )建解析器

  接下來(lái)我們來(lái)看一下JAXP的SAX Parser是怎么樣工作的。

  首先聲明 XMLReader xmlReader。然后使用 SAXParserFactory 來(lái)創(chuàng )建 SAXParser。正是 SAXParser 給您了 XMLReader。

  import org.xml.sax.helpers.DefaultHandler;

  import javax.xml.parsers.SAXParser;

  import javax.xml.parsers.SAXParserFactory;

  import org.xml.sax.XMLReader;

  public class SurveyReader extends DefaultHandler

  {

  public SurveyReader() {

  }

  public static void main (String args[]) {

  XMLReader xmlReader = null;

  try {

  SAXParserFactory spfactory =

  SAXParserFactory.newInstance();

  spfactory.setValidating(false); //設置驗證選項,

  如果您的XML文件是有效文檔的話(huà),

  就不用驗證.這將提高處理速度

  SAXParser saxParser = spfactory.newSAXParser();

  xmlReader = saxParser.getXMLReader();

  } catch (Exception e) {

  System.err.println(e);

  System.exit(1);

  }

  }

  }

  設置內容處理程序

  一旦創(chuàng )建了解析器,則需要將 SurveyReader 設置為內容處理程序,以便于其接收事件。

  xmlReader 的 setContentHandler() 方法完成這項工作。

  ...

  xmlReader = saxParser.getXMLReader();

  xmlReader.setContentHandler(new SurveyReader());

  } catch (Exception e) {

  ...

  當然,對于內容處理程序,這不是唯一的選項。

  解析 InputSource

  為了對文件進(jìn)行實(shí)際地解析,需要 InputSource。這個(gè) SAX 類(lèi)封裝了所有將要處理的數據,所以不必擔心它來(lái)自哪里。

  現在,準備對文件進(jìn)行實(shí)際解析。應用程序將封裝在 InputSource 中的文件傳遞給 parse(),然后應用程序會(huì )繼續運行。

  ...

  import org.xml.sax.InputSource;

  ...

  xmlReader = saxParser.getXMLReader();

  xmlReader.setContentHandler(new SurveyReader());

  InputSource source = new InputSource("surveys.xml");

  xmlReader.parse(source);

  } catch (Exception e) {

  ...

  可以編譯和運行該程序,但這時(shí)應該什么也沒(méi)有發(fā)生,因為應用程序還沒(méi)有定義任何事件。

  創(chuàng )建 ErrorHandler

  當然總會(huì )有可能在試圖進(jìn)行解析時(shí),數據有問(wèn)題。在這樣的情況下,有一個(gè)處理程序來(lái)處理錯誤和內容將是有幫助的。

  就如同創(chuàng )建內容處理程序一樣,可以創(chuàng )建出錯處理程序。通常,將作為 ErrorHandler 的單獨實(shí)例來(lái)創(chuàng )建它,但為了簡(jiǎn)化該示例,出錯處理正是包含在 SurveyResults 中。由于該類(lèi)繼承了 DefaultHandler 且沒(méi)有擴展 ContentHandler,所以這種雙重用法是可能的。

  需要關(guān)注的事件有三個(gè):警告、錯誤和致命錯誤。

  ...

  import org.xml.sax.SAXParseException;

  public class SurveyReader extends DefaultHandler

  {

  public SurveyReader() {

  }

  public void error (SAXParseException e) {

  System.out.println("Error parsing the file: "+e.getMessage());

  }

  public void warning (SAXParseException e) {

  System.out.println("Problem parsing the file: "+e.getMessage());

  }

  public void fatalError (SAXParseException e) {

  System.out.println("Error parsing the file: "+e.getMessage());

  System.out.println("Cannot continue.");

  System.exit(1);

  }

  }

  ....

  xmlReader.setContentHandler(new SurveyReader());

  xmlReader.setErrorHandler(new SurveyReader());

  //設置 ErrorHandler

  InputSource source = new InputSource("surveys.xml");

  ....

  public static void main (String args[]) {

  ...

  SAX 事件

  以下事件是常用的;它們都在 org.xml.sax 包的 HandlerBase 類(lèi)中定義。

  startDocument 表示文檔開(kāi)始。

  endDocument 表示文檔結束。

  startElement 表示元素開(kāi)始。當一對標記中的起始標記中的所有內容被處理后,解析器 激發(fā)此事件。包括了標記名和其屬性。

  endElement 表示元素結束。

  characters 包含字符數據,類(lèi)似于 DOM 的一個(gè) Text 節點(diǎn)。

  還有更多的 SAX 事件:

  ignorableWhitespace 此事件類(lèi)似于我們前面所討論的無(wú)用 DOM 節點(diǎn)。它與 character 事件的區別,好處是:如果您不需要空格符,您可以通過(guò)忽略這個(gè)事件來(lái)忽略所有的空格符。

  warning、error 和 fatalError 這三個(gè)事件表示了解析錯誤。您可根據需要來(lái)響應它們。

  setDocumentLocator 這個(gè)事件允許您存儲一個(gè) SAX 的 Locator 對象。Locator 對象可以用來(lái)找出在文檔中確切發(fā)生事件的地方。


【XML認證知識點(diǎn):SAX Parser】相關(guān)文章:

XML認證考試知識點(diǎn):Parser08-21

IBM XML認證知識點(diǎn):Dtd09-01

XML認證元素類(lèi)型聲明05-28

關(guān)于IBM XML認證考試的要點(diǎn)09-07

ibm認證考試知識點(diǎn)08-05

Linux認證考試必考知識點(diǎn)09-02

華為認證:HCSE路由知識點(diǎn)羅列08-03

關(guān)于XML的介紹08-29

Xml的英語(yǔ)解釋11-01

linux認證工程師知識點(diǎn)積累08-23

激情欧美日韩一区二区,浪货撅高贱屁股求主人调教视频,精品无码成人片一区二区98,国产高清av在线播放,色翁荡息又大又硬又粗视频