首页新闻体育娱乐视频财经科技汽车房产游戏女性天气短信邮箱导航通行证
爱问(iAsk.com)
科技时代新浪首页 > 科技时代 > 学园 > 正文

在JDK 6.0中基于StAX分析XML数据(3)


http://www.sina.com.cn 2006年06月13日 16:53 天极yesky

  五、 使用XMLStreamReader进行分析

  通过使用XMLStreamReader API分析列表1中的文档,我们来详细分析一下其工作原理。XMLStreamReader使用一种光标分析XML文档。它的接口包含一个next()方法-由它分析下一个分析事件。getEventType()方法返回事件类型。后面的代码片断来自于XMLParser.java应用程序,详见列表3。

  在这个XMLParser.java应用程序中,首先,你要导入StAX类:

import javax.xml.stream.*;
import javax.xml.stream.events.*;
import javax.xml.stream.XMLInputFactory;

  然后,创建一个XMLInputFactory,由此你会得到一个XMLStreamReader:

XMLInputFactory inputFactory=XMLInputFactory.newInstance();

  现在,你需要创建一个InputStream,作为一个输入流,它描述了将被分析的文件。另外,还要从前面创建的XMLInputFactory对象中创建一个XMLStreamReader。

InputStream input=new FileInputStream(new File("C:/STAX/catalog.xml"));
XMLStreamReader xmlStreamReader =inputFactory.createXMLStreamReader(input);

  如果更多分析事件可用,hasNext()方法返回true。然后,使用next()方法获得下一个分析事件:

int event=xmlStreamReader.next();

  比较于SAX分析,StAX分析的优点是,一个分析事件可以被跳过-通过调用next()方法,详见下面的代码。例如,如果分析事件类型为ENTITY_DECLARATION,那么开发者可以决定是要从当前事件中获得事件信息,还是检索下一个事件:

If(event.getEventType()==XMLStreamConstants.ENTITY_DECLARATION){
int event=xmlStreamReader.next();
}

  通过不调用next()方法,分析也可以被推迟。next()方法返回int,它代表了一个分析事件-通过使用一个XMLStreamConstants常量指定。

  XMLStreamReader所返回的不同的事件类型列举于表格1中。

事件类型 描述
START_DOCUMENT 一个文档的开始
START_ELEMENT 一个元素的开始
ATTRIBUTE 一个元素属性
NAMESPACE 一个命名空间声明
CHARACTERS 字符可以是文本,或是一个空格
COMMENT 一个注释
SPACE 可忽略的空格
PROCESSING_INSTRUCTION 处理指令
DTD 一个DTD
ENTITY_REFERENCE 一个实体参考
CDATA Cdata节
END_ELEMENT 结束元素
END_DOCUMENT 结束文档
ENTITY_DECLARATION 一个实体声明
NOTATION_DECLARATION 一个标志声明
        表格1.XMLStreamReader事件

  这些不同的分析事件能够使你获得XML文档中的数据和元数据。如果分析事件类型是START_DOCUMENT,那么你将使用getEncoding()方法获得XML文档中的指定编码,而你将使用getVersion()方法返回XML文档的XML版本。

  同样,如果你在使用一个START_ELEMENT事件类型工作,那么你将使用getPrefix()方法来返回元素前缀并且使用getNamespaceURI来返回元素前缀命名空间或默认命名空间。为了获得元素的本地命名,你将使用getLocalName()方法并且使用getAttributesCount()方法获得属性数目。你将使用getAttributePrefix(i)方法得到一个指定的属性索引i的属性前缀,而使用getAttributeNamespace(i)方法取得属性命名空间。使用getAttributeLocalName(i)方法获得属性本地命名,使用getAttributeValue(i)方法获得属性值。如果事件类型是CHARACTERS或COMMENT,则使用getText()方法获得相应的文本。

  列表4显示了示例XML文档,catalog.xml,的分析输出结果。

  列表3显示了用于分析XML文档的Java应用程序。你可以从命令行上或在一种例如Eclipse这样的IDE中来运行该应用程序。记住:如果你没有首先运行XMLWriter.java应用程序而运行XMLParser.java(见源码中的列表2),那么你需要把catalog.xml(见源码中的列表1)复制到C:/StAX目录下。

[上一页] [1] [2] [3] [4] [下一页]

发表评论

爱问(iAsk.com) 相关网页共约1,380,000篇。



评论】【论坛】【收藏此页】【 】【多种方式看新闻】【下载点点通】【打印】【关闭




科技时代意见反馈留言板 电话:010-82628888-5595   欢迎批评指正

新浪简介 | About Sina | 广告服务 | 联系我们 | 招聘信息 | 网站律师 | SINA English | 会员注册 | 产品答疑

Copyright © 1996 - 2006 SINA Inc. All Rights Reserved

新浪公司 版权所有