博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Java学习:使用StAX解析XML
阅读量:5731 次
发布时间:2019-06-18

本文共 3539 字,大约阅读时间需要 11 分钟。

hot3.png

本文是我在学习《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节点开始:personid:101;name:Tsybius;remark:1;节点结束:person节点开始:personid:102;name:Galatea;remark:2;节点结束:person节点开始:personid:103;name:Quintus;remark:3;节点结束:person节点开始:personid:104;name:Atia;remark:4;节点结束:person节点开始:personid:105;name:Justitia;remark:5;节点结束:person节点结束:list1节点开始:list2节点开始:personid:201;name:Zhang;remark:a;节点结束:person节点开始:personid:202;name:Wang;remark:b;节点结束:person节点开始:personid:203;name:Li;remark:c;节点结束:person节点开始:personid:204;name:Zhao;remark:d;节点结束:person节点开始:personid:205;name:Liu;remark:e;节点结束:person节点结束:list2节点开始:text值:TEXT节点结束:text节点结束:root文档结束END

END

转载于:https://my.oschina.net/Tsybius2014/blog/539543

你可能感兴趣的文章
一点不懂到小白的linux系统运维经历分享
查看>>
MDT 2013 从入门到精通之软件自动化部署设置
查看>>
桌面支持--打不开网页上的pdf附件解决办法(ie-tools-compatibility)
查看>>
桌面支持--outlook取消收件规则1
查看>>
nagios监控windows 改了NSclient++默认端口 注意事项
查看>>
儿呀,娘想做你家的一条狗
查看>>
干货 | JAVA代码引起的NATIVE野指针问题(上)
查看>>
POI getDataFormat() 格式对照
查看>>
Project build error: Non-resolvable import POM
查看>>
数据类型
查看>>
Python 中的进程、线程、协程、同步、异步、回调
查看>>
swoft速学~redis引入
查看>>
LTS
查看>>
sublime插件自用
查看>>
Mysql客户端工具可以连接,但是代码访问就会报错
查看>>
Free Windows Applications
查看>>
好的产品原型具有哪些特点?
查看>>
实现java导出文件弹出下载框让用户选择路径
查看>>
刨根问底--技术--jsoup登陆网站
查看>>
awk学习笔记
查看>>