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

首頁 > 學院 > 開發設計 > 正文

Java API for XML Parsing(JAXP)演進

2019-11-18 10:48:26
字體:
來源:轉載
供稿:網友

  簡介
  
  在1998年W3Cxml1.0推薦標準發布之后,XML就開始變得很流行。Sun公司就是在那時候規范java Community PRocess (JCP),同時JAXP(JSR-05)的第一版在2000早些時候發布了。這個版本得到了很多工業集團的支持,譬如(以年月次序排列)BEA Systems, Fujitsu Limited, Hewlett-Packard, IBM, Netscape Communications, Oracle, and Sun Microsystems, Inc.
  
  JAXP (全稱Java API for XML Parsing)的可插拔性(pluggability)在開發社區里引起很大的轟動。這點也是JAXP的精華所在。開發人員可以編寫自己的xml處理器,只要它符合JAXP的APIs,這樣底層不同的xml處理器可以任意切換而不用改應用程序的代碼。
  
  那JAXP到底是什么呢?首先 這個P有點迷惑,它代表Parsing還是Processing呢?
  
  因為JAXP1.0的時候只支持解析(parsing),所以JAXP全稱應該是Java API for XML Parsing.
  
  但在JAXP1.1的時候,XSL-T被推薦用作XML的轉換(transformation)處理。很遺憾,當時W3C XLT-T的標準規范(specification)里沒有提供任何用來轉換(transformation)處理的APIs。因此JAXP1.1的專家組推薦了一組APIs叫Transformation API for XML (TrAX)。
  
  從此JAXP就叫Java API for XML Processing. JAXP通過逐步進化,支持的東西也越來越多
  
  不僅僅是解析xml文件(譬如在解析文檔的時候根據schema校驗有效性,根據預解析的schema來校驗文檔有效性,計算XPath 表達式等等)。
  
  由于底層用來處理xml文檔的可插拔的processor是任意編寫的,只要它符合JAXP的規范,因此JAXP 是一個輕量級的處理xml文件的處理APIs。(譯者注:JAXP只是一個api規范而已,真正底層實現是任意的。后面會有具體介紹。)
  
  使用JAXP來解析XML文檔
  
  JAXP支持基于對象和基于事件的兩種解析方式。基于對象的解析,到目前為止只支持W3C DOM解析,JAXP的專家組可能在JAXP的將來版本中會支持J-DOM規范。基于事件的解析,只有SAX 解析模式被支持,另一個基于事件的解析模式叫Pull Parsing,本來它應該是JAXP的一部分。但是對于Pull Parsing存在有一份不同的JSR (#173)文檔,也就是大家所知道的Streaming API for XML (StAX) parsing,現在我們對于那個也沒什么更多的可以做了。
  
 Java API for XML Parsing(JAXP)演進(圖一)
  Figure 1: Various mechanism of parsing XML

  
  使用SAX來解析XML文檔
  
  SAX APIs 是在1998年的早些時候由David Megginson提出的,目標是成為基于事件驅動的xml文檔解析模式的標準API(這里你可以的到一些 SAX 的歷史信息)。即使這樣,SAX仍不是W3C 的REC。但毫無疑問實際中它是行業內解析XML文檔的標準。
  
  SAX 是一種基于事件的解析模式,是push-parsing原理,解析文檔的時候,當碰到<opening> 標簽, </closing>標簽 或字符等,SAX 都會產生相應的事件(event)。一個SAX解析器解析XML文檔的時候,把文檔看作為一個流,依次產生相應的事件報告給已注冊的content handler, org.xml.sax.ContentHandler,假如有錯誤,錯誤會報告給error handler, org.xml.sax.ErrorHandler.
  
  假如你不注冊一個error handler,那你就根本不會知道在解析XML文檔的時候有沒有錯誤產生和錯誤是什么。因此,在SAX解析XML文檔的時候注冊一個error handler是極其重要的。
  
  假如程序需要知道有什么事件產生了(并且想處理此事件),那你必須實現org.xml.sax.ContentHandler 接口并注冊給 SAX解析器。一個典型的事件被觸發的順序是
  
  startDocument, startElement, characters, endElement, endDocument。
  
  startDocument 僅僅被觸發一次而且是在觸發其它event之前。同樣,endDocument僅僅被觸發一次而且是在整個文檔被成功解析之后。你可以從SAX javadocs中獲取更具體的信息。
  
 Java API for XML Parsing(JAXP)演進(圖二)
  Figure 2: SAX Parsing XML

  
  使用JAXP,通過SAX parse XML document的代碼片斷:
  
  SAXParserFactory spfactory = SAXParserFactory.newInstance();
  spfactory.setNamespaceAware(true);
  SAXParser saxparser = spfactory.newSAXParser();
  //write your handler for processing events and handling error
  DefaultHandler handler = new MyHandler();
  //parse the XML and report events and errors (if any) to the handler
  saxparser.parse(new File("data.xml"), handler);
  
  文檔對象模型解析
  
  DOM 解析是基于對象的原理,當用DOM解析XML文檔時它會在內存中生成一個樹形的結構來表示一個XML文檔。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 根河市| 大宁县| 高淳县| 聊城市| 永登县| 呼和浩特市| 安庆市| 博野县| 齐齐哈尔市| 广东省| 永寿县| 原阳县| 应城市| 岳阳市| 玉山县| 平湖市| 望城县| 台州市| 多伦县| 佛山市| 永靖县| 莱芜市| 诸暨市| 北碚区| 吉林市| 原阳县| 东兰县| 道真| 翼城县| 巴彦淖尔市| 陕西省| 商都县| 肇州县| 安阳市| 蒲江县| 贞丰县| 瑞丽市| 广昌县| 延川县| 余干县| 兴义市|