使用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)

          搜索

          最新評論

          主站蜘蛛池模板: 衡东县| 阳春市| 若羌县| 祁东县| 山东省| 玉龙| 嵊泗县| 高雄县| 金华市| 德昌县| 荔浦县| 泾源县| 昌都县| 苍梧县| 内黄县| 巴楚县| 忻城县| 松滋市| 张北县| 龙江县| 顺平县| 鸡泽县| 曲松县| 梓潼县| 塔河县| 萨迦县| 杨浦区| 永寿县| 凉城县| 马山县| 镇坪县| 林甸县| 沂南县| 澄城县| 岫岩| 山西省| 黑龙江省| 镇雄县| 北辰区| 孝义市| 汉沽区|