使用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 刘铮 阅读(573) 评论(0)  编辑  收藏 所属分类: XML


只有注册用户登录后才能发表评论。


网站导航:
 
<2024年5月>
2829301234
567891011
12131415161718
19202122232425
2627282930311
2345678

导航

统计

留言簿(1)

文章分类(141)

文章档案(147)

搜索

最新评论