使用stax解析xml

          StAX 框架(Streaming API for XML)

          SAX 框架的缺點是不能記錄正在處理元素的上下文。但是優點是運行時占內存空間比較小,效率高。DOM 框架由于在處理 XML 時需要為其構造一棵樹,所以特點正好相反。StAX 框架出現于 Java SE 6 中,它的設計目標就是要結合 SAX 框架和 DOM 框架的優點。既要求運行時效率,也要求保持元素的上下文狀態。清單 5 是一段使用 StAX 框架處理 XML 文件的代碼。


          清單 5. 使用 StAX 框架處理 XML 文件
                      import java.io.*;
                      import javax.xml.stream.*;
                      import javax.xml.stream.events.*;
                      public class StAXTest {
                      public static void main(String[] args) {
                      XMLInputFactory inputFactory = XMLInputFactory.newInstance();
                      InputStream input = new ByteArrayInputStream(
                      ("<?xml version=\"1.0\" encoding=\"UTF-8\"?>" +
                      "<work-contact-info>" +
                      "<Location>Shanghai-shuion-333</Location>" +
                      "<Postal>200020</Postal>" +
                      "<Tel><fix>63262299</fix><mobile>1581344454</mobile></Tel>" +
                      "<Appellation>Mr. Wang</Appellation>" +
                      "</work-contact-info>").getBytes());
                      try {
                      XMLEventReader xmlEventReader = inputFactory.createXMLEventReader(input);
                      while (xmlEventReader.hasNext()) {
                      XMLEvent event = xmlEventReader.nextEvent();
                      if (event.isStartElement()) {
                      StartElement startElement = event.asStartElement();
                      System.out.println(startElement.getName().toString());
                      }
                      if (event.isCharacters()) {
                      Characters text = event.asCharacters();
                      if (!text.isWhiteSpace()) {
                      System.out.println("\t" + text.getData());
                      }
                      }
                      }
                      } catch (XMLStreamException e) {
                      e.printStackTrace();
                      }
                      }
                      }
                      

          觀察后可以發現 StAX 框架和 SAX 框架具有相似的地方。StAX 有 Event.isStartElement 方法,SAX 有 DefaultHandler.startElement 方法。StAX 有 Event.isCharacter 方法,SAX 有 DefaultHandler.character 方法。實際上這兩個框架處理 XML 文件的時候使用了相似的模型——將 XML 文件作為元素組成的流,而不同于 DOM 的樹模型。解析 XML 文件時,應用程序調用 XMLEventReadernextEvent 方法解析下一個元素(或者是解析同一個元素,根據解析的不同階段,產生不同元素),StAX 就會通過 XMLEventReader 產生一個事件。比如針對同一個元素,可能會產生 StartElementEndElement 事件。形象的說 XMLEventReader 就像是一根繩子,拽一下,解析一個元素,產生一個事件。于是這種技術也被稱為”Pull Parser”技術。StAX 在處理 XML 文件時,產生的所有事件是通過一個 IteratorXMLEventReader 繼承了 Iterator)返回的。應用程序通過這個 Iterator 能知道某個解析事件的前后分別是什么。這類信息就是一個元素的上下文信息。

          posted on 2007-12-04 11:43 劉錚 閱讀(597) 評論(0)  編輯  收藏 所屬分類: XML

          <2025年5月>
          27282930123
          45678910
          11121314151617
          18192021222324
          25262728293031
          1234567

          導航

          統計

          留言簿(1)

          文章分類(141)

          文章檔案(147)

          搜索

          最新評論

          主站蜘蛛池模板: 波密县| 清新县| 拜泉县| 秦皇岛市| 娱乐| 普格县| 彭水| 囊谦县| 临猗县| 灵丘县| 安溪县| 龙南县| 辽宁省| 资源县| 太湖县| 扎赉特旗| 九龙县| 郧西县| 视频| 兴国县| 贵州省| 天长市| 会同县| 临安市| 自贡市| 墨江| 柏乡县| 萝北县| 长泰县| 临沂市| 夹江县| 金川县| 石阡县| 内江市| 华容县| 高平市| 应用必备| 潼关县| 巧家县| 舞钢市| 江门市|