`
awdxzc
  • 浏览: 335100 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

StAX -- JDK内置的XML解析器

    博客分类:
  • java
阅读更多
    在千禧年左右,当 XML 第一次出现在很多 Java 开发人员面前时,有两种基本的解析 XML 文件的方法。SAX 解析器实际是由程序员对事件调用一系列回调方法的大型状态机。DOM 解析器将整个 XML 文档加入内存,并切割成离散的对象,它们连接在一起形成一个树。该树描述了文档的整个 XML Infoset 表示法。这两个解析器都有缺点:SAX 太低级,无法使用,DOM 代价太大,尤其对于大的 XML 文件 — 整个树成了一个庞然大物。

幸运的是,Java 开发人员找到第三种方法来解析 XML 文件,通过对文档建模成 “节点”,它们可以从文档流中一次取出一个,检查,然后处理或丢弃。这些 “节点” 的 “流” 提供了 SAX 和 DOM 的中间地带,名为 “Streaming API for XML”,或者叫做StAX。(此缩写用于区分新的 API 与原来的 SAX 解析器,它与此同名。)StAX 解析器后来包装到了 JDK 中,在 javax.xml.stream 包。

使用 StAX 相当简单:实例化 XMLEventReader,将它指向一个格式良好的 XML 文件,然后一次 “拉出” 一个节点(通常用 while 循环),查看。例如,在清单 1 中,列举出了 Ant 构造脚本中的所有目标:
				
import java.io.*;
import javax.xml.namespace.QName;
import javax.xml.stream.*;
import javax.xml.stream.events.*;
import javax.xml.stream.util.*;

public class Targets
{
    public static void main(String[] args)
        throws Exception
    {
        for (String arg : args)
        {
            XMLEventReader xsr = 
                XMLInputFactory.newInstance()
                    .createXMLEventReader(new FileReader(arg));
            while (xsr.hasNext())
            {
                XMLEvent evt = xsr.nextEvent();
                switch (evt.getEventType())
                {
                    case XMLEvent.START_ELEMENT:
                    {
                        StartElement se = evt.asStartElement();
                        if (se.getName().getLocalPart().equals("target"))
                        {
                            Attribute targetName = 
                                se.getAttributeByName(new QName("name"));
                            // Found a target!
                            System.out.println(targetName.getValue());
                        }
                        break;
                    }
                    // Ignore everything else
                }
            }
        }
    }
}


StAX 解析器不会替换所有的 SAX 和 DOM 代码。但肯定会让某些任务容易些。尤其对完成不需要知道 XML 文档整个树结构的任务相当方便。

请注意,如果事件对象级别太高,无法使用,StAX 也有一个低级 API 在 XMLStreamReader 中。尽管也许没有阅读器有用,StAX 还有一个 XMLEventWriter,同样,还有一个 XMLStreamWriter 类用于 XML 输出。

分享到:
评论

相关推荐

    Java中解析Xml所系jar包集合

    Jaxen是一个独立于XML解析器的XPath实现,它支持多种XML API,包括DOM、DOM4J、JDOM、XOM等。Jaxen提供了一种统一的方式来执行XPath表达式,使得在不同XML处理库之间切换变得容易。XPath是XML中的一个查询语言,...

    解析XML的四种JAR包jdom.jar、SAX.jar、dom4j.jar、dom.jar

    接下来,我们将深入探讨这四种XML解析器。 1. **jdom.jar**: JDOM(Java Document Object Model)是一个专为Java设计的API,它提供了一种构建和操作XML文档的直接方式。JDOM通过DOM模型实现,允许开发者创建、...

    jdk-6u45-windows-x64.exe

    5. **XML处理**:更新了DOM和SAX解析器,提升了XML处理性能,同时增加了StAX API(Streaming API for XML)。 6. **改进的JDBC**:增强了对数据库连接池的支持,并引入了批处理操作的优化。 7. **增强的安全性**:...

    xml-commons-external-1.4.01-bin.zip

    这个项目的主要目的是为Java开发者提供一个统一的地方来获取和使用这些非JDK内置的XML处理组件。"xml-commons-external-1.4.01-bin.zip"是一个包含这些组件二进制版本的压缩包,版本号为1.4.01。 XML Commons ...

    jdk-6u13-linux-i586.zip

    3. **JSON支持**:内置了轻量级JSON解析器,便于处理JSON格式的数据。 4. **增强的JDBC API**:提升了数据库连接池的性能,增加了对存储过程的支持。 5. **XML处理改进**:更新了StAX API,提高了XML处理的效率。 ...

    jdk1.6 api中文文档

    7. **XML解析器**:JDK 1.6内置了更强大的XML解析器,如SAX和DOM解析器,以及StAX(Streaming API for XML),满足不同场景下的XML处理需求。 8. **改进的垃圾收集器**:JDK 1.6的垃圾收集器如Parallel GC和CMS...

    jdk api 1.8_google.zip

    5. **改进的XML处理**:如StAX API的集成,使得处理大型XML文档更加高效。 6. **改进的安全性**:增强了SSL/TLS协议,增加了对数字证书的管理。 **JDK 1.8 知识点** JDK 1.8,也称为Java SE 8,是Java发展历程中的...

    JDK_API_1.6.CHM 中文版

    6. **XML处理**:JAXB 2.0提供了更方便的数据绑定,而StAX(Streaming API for XML)则提供了低级别的XML解析能力。 7. **改进的日志和诊断**:JDK 1.6提供了更强大的日志框架和JConsole等诊断工具,帮助开发者监控...

    java JDK1.5---32位和64位

    10. **内建XML支持**:Java 1.5增加了对XML处理的内置支持,如`javax.xml`包下的`DOM`, `SAX`, `StAX`解析器,简化了XML的读写操作。 11. **编译器警告**:增强了编译器的警告机制,如未使用的变量、不推荐的API等...

    jdk 6u5 for windows

    JDK 6包含了一些重要的新特性,例如改进的Swing UI组件、内置的XML处理库(如StAX)、新的脚本引擎支持(如JavaScript via Rhino)以及增强的调试工具。此外,JDK 6还引入了新的编程语言特性,如枚举类型的foreach...

    JDK1.6API中文版

    8. **XML处理**:`javax.xml`包包含了处理XML的类,如DOM、SAX和StAX解析器,以及XPath和XSLT处理器。 9. **Swing组件**:`javax.swing`包提供了用于构建图形用户界面的组件,如按钮、文本框、面板等。 10. **国际...

    jdk-6u45-windows-x64.zip

    5. **XML处理**:更新了DOM、SAX和StAX解析器,增强了XPath和XSLT的支持。 6. **Java Web Start和Applet的改进**:提供更好的安全性和用户体验,以及对JNLP(Java Network Launch Protocol)的增强。 7. **Java...

    JDK1.6的九大新特性

    3. **StAX API**:StAX作为JDK1.6中处理XML文档的第三个选项,提供了流式解析XML的能力。与DOM的内存树模型和SAX的推模式解析不同,StAX采用拉模式解析,允许开发者以迭代器的方式按需处理XML事件,提高了处理大文件...

    ssh+jdk1.7+mysql+jquery+xml+html+css+js+jsp等常用api汇总

    其API包括解析和生成XML文档的函数,如DOM、SAX和StAX解析器。 **HTML (HyperText Markup Language)** HTML是网页的基础,定义了网页的结构。HTML5 API扩展了原有的HTML,引入了新的元素、属性和API,如离线存储、...

    JDK6.0API官方中文版CHM

    - **StAX(Streaming API for XML)**: 提供了`javax.xml.stream`包,支持事件驱动的XML解析,提高了性能。 - **JAXB 2.0(Java Architecture for XML Binding)**: 改进了XML与Java对象之间的绑定,使数据交换...

    JDK 11 API中文帮助文档.rar

    6. **XML处理**:`javax.xml`包提供了解析和操作XML文档的工具,如DOM、SAX和StAX解析器。 7. **JDBC**:`java.sql`包提供了数据库连接和查询的接口,如Connection、Statement和ResultSet。 8. **日期和时间API**...

    jaxws-rt发布依赖的jar包.zip

    6. **woodstox-core-asl.jar** 或 **stax2-api.jar**:可能包含Woodstox或StAX的实现,这两个是XML流解析器,用于高效处理XML文档。 7. **activation.jar**:JavaBeans Activation Framework (JAF),用于处理MIME...

    jdk 文档 1.6 和 1.8

    4. **改进的XML处理**:添加了StAX(Streaming API for XML),提供了更高效的XML解析。 5. **JDBC 4.0**:增强了数据库连接池和自动类型映射功能。 6. **安全增强**:增加了对数字证书和加密的支持。 **JDK 1.8** ...

    Jdk api 1.6中文文档

    13. **XML处理**:`javax.xml`包提供了解析、操作XML文档的API,如DOM、SAX和StAX解析器。 14. **JDBC**:Java数据库连接API允许Java程序与各种数据库进行交互,`java.sql`包包含了DriverManager、Connection、...

    JDK6、JDK7、JDK8

    6. **XML处理优化**:DOM和SAX解析器性能提升,增加了StAX API支持。 7. **改进的内存管理**:垃圾收集器优化,提升了应用的运行效率。 **JDK7(Java Development Kit 7,也称为Java SE 7):** JDK7于2011年发布,...

Global site tag (gtag.js) - Google Analytics