StAX通过拉模式解析XML,节省内存且易用。使用XMLInputFactory创建XMLStreamReader,逐事件读取START_ELEMENT、CHARACTERS等节点,提取标签、属性和文本内容,适合处理大文件。

StAX(Streaming API for XML)是Java提供的一种基于拉模式的XML解析方式,相比DOM更节省内存,比SAX更易用。它允许程序像“迭代器”一样逐个读取XML中的元素、属性和文本内容,适合处理大文件或需要高效解析的场景。
使用StAX前,需了解两个核心接口:
基本初始化代码如下:
XMLInputFactory factory = XMLInputFactory.newInstance();
XMLStreamReader reader = factory.createXMLStreamReader(new FileInputStream("data.xml"));
假设有一个XML文件books.xml:
立即学习“Java免费学习笔记(深入)”;
<library>
<book id="101">
<title>Java编程思想</title>
<author>Bruce Eckel</author>
</book>
<book id="102">
<title>Effective Java</title>
<author>Joshua Bloch</author>
</book>
</library>
我们通过StAX逐层解析并提取信息。
StAX以“事件”驱动,通过reader.next()获取下一个事件类型,常见包括:
解析逻辑示例:
while (reader.hasNext()) {
int event = reader.next();
switch (event) {
case XMLStreamConstants.START_ELEMENT:
System.out.print("标签: " + reader.getLocalName());
// 输出属性
if (reader.getAttributeCount() > 0) {
System.out.print(" 属性: " + reader.getAttributeValue(0));
}
System.out.println();
break;
case XMLStreamConstants.CHARACTERS:
String text = reader.getText().trim();
if (!text.isEmpty()) {
System.out.println(" 内容: " + text);
}
break;
case XMLStreamConstants.END_ELEMENT:
System.out.println("/" + reader.getLocalName());
break;
}
}
如果只想提取所有书名和作者,可以结合状态判断:
String currentElement = "";
boolean inBook = false;
while (reader.hasNext()) {
int event = reader.next();
if (event == XMLStreamConstants.START_ELEMENT) {
currentElement = reader.getLocalName();
if ("book".equals(currentElement)) {
inBook = true;
System.out.println("书籍ID: " + reader.getAttributeValue(0));
}
} else if (event == XMLStreamConstants.CHARACTERS && inBook) {
String text = reader.getText().trim();
if (!text.isEmpty()) {
if ("title".equals(currentElement)) {
System.out.println(" 书名: " + text);
} else if ("author".equals(currentElement)) {
System.out.println(" 作者: " + text);
}
}
} else if (event == XMLStreamConstants.END_ELEMENT) {
if ("book".equals(reader.getLocalName())) {
inBook = false;
System.out.println("---");
}
}
}
基本上就这些。StAX在保持低内存占用的同时提供了清晰的控制流,特别适合逐条处理记录类XML数据。掌握事件类型判断和属性/文本提取方法后,就能灵活应对大多数解析需求。不复杂但容易忽略细节,比如空格文本和属性索引处理。
以上就是Java的StAX解析器怎么使用XML_Java StAX流式API解析XML实践教程的详细内容,更多请关注php中文网其它相关文章!
每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号