使用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 劉錚 閱讀(602) 評論(0)  編輯  收藏 所屬分類: XML

          <2025年7月>
          293012345
          6789101112
          13141516171819
          20212223242526
          272829303112
          3456789

          導航

          統計

          留言簿(1)

          文章分類(141)

          文章檔案(147)

          搜索

          最新評論

          主站蜘蛛池模板: 绥德县| 斗六市| 凌云县| 高阳县| 尉氏县| 萨嘎县| 龙陵县| 连城县| 柏乡县| 汕头市| 渭源县| 长乐市| 乡城县| 霸州市| 黄梅县| 东乌| 辽中县| 新兴县| 玛曲县| 新沂市| 石阡县| 邮箱| 平山县| 宿迁市| 昌图县| 岢岚县| 抚松县| 鄂伦春自治旗| 新蔡县| 昭通市| 罗定市| 松原市| 咸阳市| 德兴市| 哈巴河县| 南丹县| 伽师县| 灵宝市| 泰州市| 安西县| 南康市|