本文是我在学习《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相关推荐

  1. JAVA SE学习day14:解析XML

    XML解析有两种方式:SAX,DOM SAX:simple api for xml,解析XML的简单API,特点是内存占用少,速度快,但由于是逐行扫描式解析,对整体结构没有把控,不能修改XML内容 * ...

  2. java stax xml_Java小知识:使用Stax解析xml文件

    问题: 通过使用Stax解析xml文件时,出现以下错误消息: 线程"主"中的异常javax.xml.stream.XMLStreamException:[row,col]:[86, ...

  3. .net java xml_java.net.MalformedURLException – 在通过StAX解析XML文件时

    我必须使用StAX解析XML文件. 我抓住了一堆例外: javax.xml.stream.XMLStreamException: java.net.MalformedURLException at c ...

  4. XML入门(四)使用STAX解析XML

    前言 本章讲解使用STAX解析XML文件 方法 1.概念 在我们XML解析技术发展的过程中,诞生了很多优秀的解析技术,如:DOM.SAX.JDOM.Dom4J.STAX等 这里我们来讲解一下STAX解 ...

  5. java stax xml_在JDK6.0中用StAX解析XML

    摘要 J2EE/XML开发人员一般都用DOM(Document Object Model,文档对象模型)API或者(SAX Simple API for XML)来解析XML文件.这些API各有利弊. ...

  6. java jdom格式_Java全面解析XML格式串(JDOM解析)

    搜索热词 Java全面解析XML格式串(JDOM解析) import java.io.IOException; import java.io.StringReader; import java.uti ...

  7. 安卓小菜鸟重拾Java系列002.Java转义字符与与sax解析xml

    已经好久没有更新博客了,炎热的夏天正如我的心情一样枯燥乏味,今年是互联的寒冬,作为一个菜鸟已经深深的感觉到了,因为自己失业了.从去年的年末的一些听闻,自己竟没有准备好迎接失业,以至于一年了,只比以前强 ...

  8. 【Java中级篇】Dom4j解析xml数据

    一.依赖 <dependency><groupId>dom4j</groupId><artifactId>dom4j</artifactId> ...

  9. java使用org.w3c.dom解析XML文档,创建、增删查改,保存,读取,遍历元素等操作

    全栈工程师开发手册 (作者:栾鹏) java教程全解 java使用org.w3c.dom(java dom)解析XML文档,创建.增删查改,保存,读取,遍历元素等操作 在保存文件时需要载入crimso ...

最新文章

  1. android studio串号,AndroidStudio使用常见问题集锦
  2. Lambda,会序列化吗?
  3. LeetCode 808. 分汤(动态规划)
  4. fianl属性 java_java基础-类的高级属性(包、final、内部类)
  5. 大数据下的精准营销,媒介们将何去何从
  6. 【医院综合管理专题】医院服务质量管理制度与规范
  7. Siddhi : Siddhi maven 仓库
  8. 在idea中创建mybatis-config.xml模板(在idea中创建mybatis核心配置文件模板)
  9. 解决 php提交表单到当前页面,刷新会重复提交 的问题
  10. Windows各个系统勒索补丁下载地址
  11. java 清屏函数_c++清屏函数是什么
  12. 怎么制作游戏脚本_自动玩游戏,手游脚本究竟是怎么做的?
  13. 企业工商数据-------大数据时代下的营销利器
  14. MyBatis Plus逆向生成
  15. 干货:中国移动互联网行业深度报告
  16. Windows——打印机错误(操作无法完成(错误 0x000006ba)。本地打印机后台处理程序服务没有运行。请重新启动打印机后台处理程序或重新启动计算机。)解决方案
  17. 全志平台Android系统wifi模组rtl8188eu移植调试记录
  18. 2020-12-10 MATLAB学习小结(十九)
  19. 微信小程序中绘制图表 (AntV F2 的使用)
  20. 不会英语可以学计算机编程吗,不会英语的人应该怎么学编程

热门文章

  1. 世界银行报告:融合技术革命和人力资本
  2. mit计算机工程专业每年学费,麻省理工研究生学费一年多少?
  3. python打印五子棋棋盘(简易)
  4. 设计模式应用有感总结
  5. 海底飞行棋(含源码)
  6. 开发者们的节日,蕴含着成长的秘密 10.24 心语
  7. display: mesa: eglapi接口:getdisplayinitialize
  8. 赛尔号和赛尔机器人_探索赛尔号:赛尔机器人全身数据,你肯定不知道
  9. 黑马程序员-----------------交通灯管理系统
  10. zsh和bash的区别