java stax_Java学习:使用StAX解析XML
本文是我在学习《Java核心技术》第九版卷II(高级特性)时写的一段代码。原书作者为(美)Cay S. Horstmann,Gary Cornell,译者为陈昊鹏、王浩、姚建平等。我的Java版本为1.8
Java提供了两种XML解析器:树型解释器DOM(Document Object Model,文档对象模型),和流机制解析器SAX(Simple API for XML,XML简单API)。流机制解析器StAX(Streaming API for XML)是一种“拉解析器”,与安装事件处理器不同,可以使用循环来迭代所有的事件。
XML文档内容如下:
文件名:NameList.xml,文件路径:C:\Users\Tsybius\Desktop\NameList.xml
TEXT
Java代码如下:
package XmlStaxTest;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.InputStream;
import javax.xml.stream.XMLInputFactory;
import javax.xml.stream.XMLStreamConstants;
import javax.xml.stream.XMLStreamException;
import javax.xml.stream.XMLStreamReader;
/**
* 使用StAX解析XML
* @author Tsybius2014
* @date 2015年12月4日
* @time 下午9:02:29
* @remark
*
*/
class XmlStaxTest {
/**
* 使用StAX解析XML
* @param args
*/
public static void main(String[] args) {
String filePath = "C:\\Users\\Tsybius\\Desktop\\NameList.xml";
InputStream stream;
try {
stream = new FileInputStream(filePath);
XMLInputFactory factory = XMLInputFactory.newInstance();
XMLStreamReader parser = factory.createXMLStreamReader(stream);
while (parser.hasNext()) {
int event = parser.next();
if (event == XMLStreamConstants.START_DOCUMENT) {
System.out.println("文档开始");
} else if (event == XMLStreamConstants.END_DOCUMENT) {
System.out.println("文档结束");
} else if (event == XMLStreamConstants.START_ELEMENT) {
System.out.println("节点开始:" + parser.getLocalName());
if (parser.getLocalName().equals("person")) {
for (int i = 0; i < parser.getAttributeCount(); i++) {
System.out.print(parser.getAttributeName(i) + ":");
System.out.print(parser.getAttributeValue(i) + ";");
}
System.out.println();
}
} else if (event == XMLStreamConstants.END_ELEMENT) {
System.out.println("节点结束:" + parser.getLocalName());
} else if (event == XMLStreamConstants.CHARACTERS) {
String text = parser.getText();
if (!text.isEmpty() && text.trim().length() > 0) {
System.out.println("值:" + parser.getText());
}
}
}
} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (XMLStreamException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
System.out.println("END");
}
}
控制台中输出结果如下:
节点开始:root
节点开始:list1
节点开始:person
id:101;name:Tsybius;remark:1;
节点结束:person
节点开始:person
id:102;name:Galatea;remark:2;
节点结束:person
节点开始:person
id:103;name:Quintus;remark:3;
节点结束:person
节点开始:person
id:104;name:Atia;remark:4;
节点结束:person
节点开始:person
id:105;name:Justitia;remark:5;
节点结束:person
节点结束:list1
节点开始:list2
节点开始:person
id:201;name:Zhang;remark:a;
节点结束:person
节点开始:person
id:202;name:Wang;remark:b;
节点结束:person
节点开始:person
id:203;name:Li;remark:c;
节点结束:person
节点开始:person
id:204;name:Zhao;remark:d;
节点结束:person
节点开始:person
id:205;name:Liu;remark:e;
节点结束:person
节点结束:list2
节点开始:text
值:TEXT
节点结束:text
节点结束:root
文档结束
END
END
java stax_Java学习:使用StAX解析XML相关推荐
- JAVA SE学习day14:解析XML
XML解析有两种方式:SAX,DOM SAX:simple api for xml,解析XML的简单API,特点是内存占用少,速度快,但由于是逐行扫描式解析,对整体结构没有把控,不能修改XML内容 * ...
- java stax xml_Java小知识:使用Stax解析xml文件
问题: 通过使用Stax解析xml文件时,出现以下错误消息: 线程"主"中的异常javax.xml.stream.XMLStreamException:[row,col]:[86, ...
- .net java xml_java.net.MalformedURLException – 在通过StAX解析XML文件时
我必须使用StAX解析XML文件. 我抓住了一堆例外: javax.xml.stream.XMLStreamException: java.net.MalformedURLException at c ...
- XML入门(四)使用STAX解析XML
前言 本章讲解使用STAX解析XML文件 方法 1.概念 在我们XML解析技术发展的过程中,诞生了很多优秀的解析技术,如:DOM.SAX.JDOM.Dom4J.STAX等 这里我们来讲解一下STAX解 ...
- java stax xml_在JDK6.0中用StAX解析XML
摘要 J2EE/XML开发人员一般都用DOM(Document Object Model,文档对象模型)API或者(SAX Simple API for XML)来解析XML文件.这些API各有利弊. ...
- java jdom格式_Java全面解析XML格式串(JDOM解析)
搜索热词 Java全面解析XML格式串(JDOM解析) import java.io.IOException; import java.io.StringReader; import java.uti ...
- 安卓小菜鸟重拾Java系列002.Java转义字符与与sax解析xml
已经好久没有更新博客了,炎热的夏天正如我的心情一样枯燥乏味,今年是互联的寒冬,作为一个菜鸟已经深深的感觉到了,因为自己失业了.从去年的年末的一些听闻,自己竟没有准备好迎接失业,以至于一年了,只比以前强 ...
- 【Java中级篇】Dom4j解析xml数据
一.依赖 <dependency><groupId>dom4j</groupId><artifactId>dom4j</artifactId> ...
- java使用org.w3c.dom解析XML文档,创建、增删查改,保存,读取,遍历元素等操作
全栈工程师开发手册 (作者:栾鹏) java教程全解 java使用org.w3c.dom(java dom)解析XML文档,创建.增删查改,保存,读取,遍历元素等操作 在保存文件时需要载入crimso ...
最新文章
- android studio串号,AndroidStudio使用常见问题集锦
- Lambda,会序列化吗?
- LeetCode 808. 分汤(动态规划)
- fianl属性 java_java基础-类的高级属性(包、final、内部类)
- 大数据下的精准营销,媒介们将何去何从
- 【医院综合管理专题】医院服务质量管理制度与规范
- Siddhi : Siddhi maven 仓库
- 在idea中创建mybatis-config.xml模板(在idea中创建mybatis核心配置文件模板)
- 解决 php提交表单到当前页面,刷新会重复提交 的问题
- Windows各个系统勒索补丁下载地址
- java 清屏函数_c++清屏函数是什么
- 怎么制作游戏脚本_自动玩游戏,手游脚本究竟是怎么做的?
- 企业工商数据-------大数据时代下的营销利器
- MyBatis Plus逆向生成
- 干货:中国移动互联网行业深度报告
- Windows——打印机错误(操作无法完成(错误 0x000006ba)。本地打印机后台处理程序服务没有运行。请重新启动打印机后台处理程序或重新启动计算机。)解决方案
- 全志平台Android系统wifi模组rtl8188eu移植调试记录
- 2020-12-10 MATLAB学习小结(十九)
- 微信小程序中绘制图表 (AntV F2 的使用)
- 不会英语可以学计算机编程吗,不会英语的人应该怎么学编程