在千禧年左右,当 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 输出。
分享到:
相关推荐
Jaxen是一个独立于XML解析器的XPath实现,它支持多种XML API,包括DOM、DOM4J、JDOM、XOM等。Jaxen提供了一种统一的方式来执行XPath表达式,使得在不同XML处理库之间切换变得容易。XPath是XML中的一个查询语言,...
接下来,我们将深入探讨这四种XML解析器。 1. **jdom.jar**: JDOM(Java Document Object Model)是一个专为Java设计的API,它提供了一种构建和操作XML文档的直接方式。JDOM通过DOM模型实现,允许开发者创建、...
5. **XML处理**:更新了DOM和SAX解析器,提升了XML处理性能,同时增加了StAX API(Streaming API for XML)。 6. **改进的JDBC**:增强了对数据库连接池的支持,并引入了批处理操作的优化。 7. **增强的安全性**:...
这个项目的主要目的是为Java开发者提供一个统一的地方来获取和使用这些非JDK内置的XML处理组件。"xml-commons-external-1.4.01-bin.zip"是一个包含这些组件二进制版本的压缩包,版本号为1.4.01。 XML Commons ...
3. **JSON支持**:内置了轻量级JSON解析器,便于处理JSON格式的数据。 4. **增强的JDBC API**:提升了数据库连接池的性能,增加了对存储过程的支持。 5. **XML处理改进**:更新了StAX API,提高了XML处理的效率。 ...
7. **XML解析器**:JDK 1.6内置了更强大的XML解析器,如SAX和DOM解析器,以及StAX(Streaming API for XML),满足不同场景下的XML处理需求。 8. **改进的垃圾收集器**:JDK 1.6的垃圾收集器如Parallel GC和CMS...
5. **改进的XML处理**:如StAX API的集成,使得处理大型XML文档更加高效。 6. **改进的安全性**:增强了SSL/TLS协议,增加了对数字证书的管理。 **JDK 1.8 知识点** JDK 1.8,也称为Java SE 8,是Java发展历程中的...
6. **XML处理**:JAXB 2.0提供了更方便的数据绑定,而StAX(Streaming API for XML)则提供了低级别的XML解析能力。 7. **改进的日志和诊断**:JDK 1.6提供了更强大的日志框架和JConsole等诊断工具,帮助开发者监控...
10. **内建XML支持**:Java 1.5增加了对XML处理的内置支持,如`javax.xml`包下的`DOM`, `SAX`, `StAX`解析器,简化了XML的读写操作。 11. **编译器警告**:增强了编译器的警告机制,如未使用的变量、不推荐的API等...
JDK 6包含了一些重要的新特性,例如改进的Swing UI组件、内置的XML处理库(如StAX)、新的脚本引擎支持(如JavaScript via Rhino)以及增强的调试工具。此外,JDK 6还引入了新的编程语言特性,如枚举类型的foreach...
8. **XML处理**:`javax.xml`包包含了处理XML的类,如DOM、SAX和StAX解析器,以及XPath和XSLT处理器。 9. **Swing组件**:`javax.swing`包提供了用于构建图形用户界面的组件,如按钮、文本框、面板等。 10. **国际...
5. **XML处理**:更新了DOM、SAX和StAX解析器,增强了XPath和XSLT的支持。 6. **Java Web Start和Applet的改进**:提供更好的安全性和用户体验,以及对JNLP(Java Network Launch Protocol)的增强。 7. **Java...
3. **StAX API**:StAX作为JDK1.6中处理XML文档的第三个选项,提供了流式解析XML的能力。与DOM的内存树模型和SAX的推模式解析不同,StAX采用拉模式解析,允许开发者以迭代器的方式按需处理XML事件,提高了处理大文件...
其API包括解析和生成XML文档的函数,如DOM、SAX和StAX解析器。 **HTML (HyperText Markup Language)** HTML是网页的基础,定义了网页的结构。HTML5 API扩展了原有的HTML,引入了新的元素、属性和API,如离线存储、...
- **StAX(Streaming API for XML)**: 提供了`javax.xml.stream`包,支持事件驱动的XML解析,提高了性能。 - **JAXB 2.0(Java Architecture for XML Binding)**: 改进了XML与Java对象之间的绑定,使数据交换...
6. **XML处理**:`javax.xml`包提供了解析和操作XML文档的工具,如DOM、SAX和StAX解析器。 7. **JDBC**:`java.sql`包提供了数据库连接和查询的接口,如Connection、Statement和ResultSet。 8. **日期和时间API**...
6. **woodstox-core-asl.jar** 或 **stax2-api.jar**:可能包含Woodstox或StAX的实现,这两个是XML流解析器,用于高效处理XML文档。 7. **activation.jar**:JavaBeans Activation Framework (JAF),用于处理MIME...
4. **改进的XML处理**:添加了StAX(Streaming API for XML),提供了更高效的XML解析。 5. **JDBC 4.0**:增强了数据库连接池和自动类型映射功能。 6. **安全增强**:增加了对数字证书和加密的支持。 **JDK 1.8** ...
13. **XML处理**:`javax.xml`包提供了解析、操作XML文档的API,如DOM、SAX和StAX解析器。 14. **JDBC**:Java数据库连接API允许Java程序与各种数据库进行交互,`java.sql`包包含了DriverManager、Connection、...
6. **XML处理优化**:DOM和SAX解析器性能提升,增加了StAX API支持。 7. **改进的内存管理**:垃圾收集器优化,提升了应用的运行效率。 **JDK7(Java Development Kit 7,也称为Java SE 7):** JDK7于2011年发布,...