- 浏览: 89828 次
- 性别:
- 来自: 北京
-
文章分类
- 全部博客 (116)
- 架构设计 (3)
- 通用代码 (2)
- web (5)
- 技术框架 (8)
- 事务 (1)
- spring (8)
- jvm内存回收机制 (1)
- 线程 (2)
- 面试 (1)
- 基础 (2)
- scrawer (1)
- jdk (2)
- webservice (2)
- 数据库 (1)
- 负载均衡 (1)
- excel (1)
- study list (0)
- 管理 (1)
- 签名 (0)
- 安全 (6)
- 备忘 (1)
- 大数据 (2)
- url 编码 (1)
- html编码 (1)
- secure (1)
- 问题 (0)
- 性能测试 (1)
- java代码 (1)
- ca (1)
- spark (7)
- 云计算 (0)
- 角色 (1)
- splunk (6)
- proxy (1)
最新评论
-
bzq19881115:
刚调试了下,很好!最近在学习swt 给份API 谢谢
SWT 滚动条 -
xgj1988:
...
ant macrodef example -
yajie:
现在的suspend(),stop(),resume(),d ...
java Thread
在JDK 6.0中基于StAX分析XML数据 |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
StAX是JDK6.0中包含的新特性。在推式模型中,直到整个XML文件全部被解析,解析器才会产生解析事件。而拉式解析由应用程序来控制,也就是说解析事件由应用程序产生。这就意味着,你可以暂缓解析、解析时跳过某个元素或者同时解析多个文件。用DOM解析式要先将XML文件解析成DOM结构,因此降低了解析效率。使用StAX,解析事件在XML文件解析过程中产生。
你要从一个XMLOutputFactory中得到你的XMLStreamWriter。因此,首先你必须创建一个新的XMLOutputFactory:
接下来,创建一个FileWriter以输出XML文档-它将被生成到一个XML文件中:
接下来,创建一个XMLStreamWriter:
现在,使用writeStartDocument()方法创建一个文档开头。添加要在XML声明中指定的编码和版本(记住,指定的编码并不是生成的XML文档的编码)。如果你需要指定XML文档的编码,该怎么办呢?当从一个XMLOutputFactory对象创建一个XMLStreamWriter对象时,你会这样做:
使用writeComment()方法以输出一个注释:
使用writeProcessingInstruction()方法以输出一条处理指令:
使用writeStartElement()方法以输出'catalog'元素的开始(元素前缀和命名空间URI也可以在这个方法中指定的):
使用writeNamespace()方法以添加'journal'命名空间声明(命名空间前缀和命名空间URI也是在这个方法中指定的):
再次使用writeNamespace()方法添加xsi命名空间:
使用writeAttribute()方法添加xsi:namespaceSchemaLocation属性:
使用writeAttribute()方法添加'publisher'属性:
输出'journal'元素的开始。当增加一个新元素时,前一个元素的'>'括号也被添加上:
使用writeAttribute()方法以添加'date'和'title'属性。然后,使用writeElement()方法以添加'article'和'title'元素。然后,使用writeCharacters()方法输出'title'元素的文本:
任何包含文本或子元素的元素都要有一个结束标签。使用writeEndElement()元素来添加'title'元素的结束标签:
添加'author'元素和'journal'元素的结束标签。在writeEndElement()方法中,不必要指定元素前缀和命名空间URI。以类似方式添加另一个'journal'元素。然后,添加'catalog'元素的结束标签。最后,输出缓冲的数据:
最后一步,关闭XMLStreamWriter。
这就是生成catalog.xml的过程。 源码中的列表2展示了完整的Java应用程序-XMLWriter.java。这个应用程序可以作为一个命令行应用程序运行或在一种例如Eclipse这样的IDE中运行。 五、 使用XMLStreamReader进行分析 通过使用XMLStreamReader API分析列表1中的文档,我们来详细分析一下其工作原理。XMLStreamReader使用一种光标分析XML文档。它的接口包含一个next()方法-由它分析下一个分析事件。getEventType()方法返回事件类型。后面的代码片断来自于XMLParser.java应用程序,详见列表3。 在这个XMLParser.java应用程序中,首先,你要导入StAX类:
然后,创建一个XMLInputFactory,由此你会得到一个XMLStreamReader:
现在,你需要创建一个InputStream,作为一个输入流,它描述了将被分析的文件。另外,还要从前面创建的XMLInputFactory对象中创建一个XMLStreamReader。
如果更多分析事件可用,hasNext()方法返回true。然后,使用next()方法获得下一个分析事件:
比较于SAX分析,StAX分析的优点是,一个分析事件可以被跳过-通过调用next()方法,详见下面的代码。例如,如果分析事件类型为ENTITY_DECLARATION,那么开发者可以决定是要从当前事件中获得事件信息,还是检索下一个事件:
通过不调用next()方法,分析也可以被推迟。next()方法返回int,它代表了一个分析事件-通过使用一个XMLStreamConstants常量指定。 XMLStreamReader所返回的不同的事件类型列举于表格1中。
这些不同的分析事件能够使你获得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目录下。 六、 使用XMLEventReader进行分析 本节将向你展示如何使用XMLEventReader来分析catalog.xml。XMLEventReader接口使用一个事件对象迭代算子分析一个XML文档;通过这种方式,一个XML事件生成一个XMLEvent对象。XMLEventReader类似于XMLStreamReader-分析事件是由StAX分析器生成的。然而,XMLEventReader比XMLStreamReader有一个优点:通过使用XMLEventReader,一个应用程序可以使用peek()方法来"偷看"下一个事件,而不必从流中读取事件。这样,一个应用程序客户端可以决定是否有必要分析下一个事件。本节中的代码片断节选自XMLEventParser.java应用程序,请参见列表5。 首先,导入StAX类:
接下来,创建一个XMLInputFactory,由它获得一个XMLEventReader对象:
在StAX中,XML文档事件是通过XMLEvent对象描述的。使用nextEvent()方法来遍历XMLEventReader对象以获得下一个事件:
使用getEventType()方法来获得事件类型(请参考表格1)。XMLEvent接口还提供布尔方法来获得事件类型。例如,isStartDocument()返回true,如果事件是开始文档类型。在下列代码中,事件是开始元素类型,因此一个StartElement对象可以从这个XMLEvent接口获得:
使用getAttributes()方法获得元素属性:
这个Iterator描述了一个javax.xml.stream.events.Attribute对象。使用next()方法遍历该Iterator。
最后,使用getName()方法获得属性命名,使用getValue()方法获得属性值。 列表5显示出分析该XML文档的Java应用程序。应用程序XMLEventReader可以作为一个命令行应用程序运行,或在一种例如Eclipse这样的IDE中运行。记住:如果你运行XMLWriter.java或XMLParser.java应用程序而不首先运行XMLEventParser.java应用程序,那么你将需要把catalog.xml复制到C:/StAX目录下。 最终,基于拉的事件生成把事件规则提供到分析器应用程序而不是提供到分析器。 |
相关推荐
STAX(Streaming API for XML)是Java平台上的一个XML处理API,它提供了对XML文档的事件驱动解析。与DOM(Document Object Model)不同,STAX不是加载整个XML文档到内存中形成一个树形结构,而是通过事件(如开始...
`stax-api.jar`是Java中用于处理XML流的STAX(Streaming API for XML)的API接口库,它提供了与XML数据交互的一套标准化接口。 STAX(Streaming API for XML)是一种低级别的XML解析方法,相比DOM(Document Object...
STAX(Streaming API for XML)是一种用于处理XML的Java API,它提供了事件驱动的解析方式,使得开发者可以高效地读取和写入XML文档。在Java世界中,STAX提供了比DOM(Document Object Model)更高效的处理XML的方式...
**STAX API 1.0-2:XML处理的关键组件** STAX,全称为Streaming API for XML,是一种用于处理XML的Java API。STAX提供了一种流式处理XML文档的方法,与DOM(Document Object Model)相比,它更加高效且内存占用更低...
赠送jar包:stax2-api-3.1.4.jar; 赠送原API文档:stax2-api-3.1.4-javadoc.jar; 赠送源代码:stax2-api-3.1.4-sources.jar; 赠送Maven依赖信息文件:stax2-api-3.1.4.pom; 包含翻译后的API文档:stax2-api-...
STAX(Streaming API for XML)是Java平台上的一个XML处理API,它提供了高效且灵活的方式来读取和写入XML文档。STAX的核心理念是事件驱动,即解析XML时,每遇到一个XML元素或属性,都会触发一个相应的事件,程序通过...
### 使用StAX组装与解析XML #### 一、引言 在处理XML文档时,Java提供了多种工具和技术,包括DOM、SAX以及本文将重点讨论的Streaming API for XML(简称StAX)。StAX是一种用于读取和写入XML数据的事件驱动型API,...
《STAX EX 1.8.3:深入解析Java XML处理库》 在Java编程领域,XML(Extensible Markup Language)作为一种数据交换和存储格式,广泛应用于各种应用场景。处理XML时,Java提供了多种API,其中STAX(Streaming API ...
在"jaxb+stax+demo"的示例中,通常会展示如何结合JAXB和STAX来高效地解析和生成XML。具体步骤可能包括以下几点: 1. **定义Java类**:首先,我们需要创建一些Java类,这些类将代表XML文档中的元素和属性。JAXB使用...
在处理XML数据时,Kettle提供了多种方式,其中XML Input Stream (StAX) 是一种高效且灵活的方法。本文将深入探讨如何使用Kettle的XML Input Stream (StAX) 进行XML数据的转换。 首先,XML(Extensible Markup ...
在Java中,有多种方法可以解析XML,其中StAX(Streaming API for XML)和JAXB(Java Architecture for XML Binding)是两种常用的技术。本篇文章将详细探讨如何结合StAX和JAXB进行高效的XML解析。 StAX是一种事件...
"stax2-api-3.1.1.jar"是一个Java库,主要用于XML解析,特别是采用了StAX 2.0规范的实现。这个jar包包含了StAX 2 API的接口和实现,使得开发人员能够利用其特性来读取和写入XML数据,而无需处理复杂的DOM树或SAX事件...
**StaxMate与STAX2 1.3.0.jar包详解** 在Java开发中,处理XML文档是一项常见的任务。为了高效地解析和生成XML,开发者通常会利用各种API,如DOM(Document Object Model)、SAX(Simple API for XML)和STAX...
### Java StAX解析XML详解 #### 一、简介与背景 在Java开发中,XML是一种常用的数据交换格式,尤其在处理配置文件或与其他系统进行数据交互时。Java提供了多种解析XML的技术,包括DOM(Document Object Model)、...
stax-ex-1.8.jarstax-ex-1.8.jarstax-ex-1.8.jar
为了处理XML文档,Java提供了多种解析方法,包括SAX(Simple API for XML)、JDOM(Java Document Object Model)、DOM(Document Object Model)以及stAX(Streaming API for XML)。下面将详细介绍这四种解析XML的...
### 使用StAX进行高效的XML处理 #### 概述 StAX(Streaming API for XML)是一种新的XML解析方式,它提供了一种高效的、基于事件驱动的方式来处理XML文档。相比于DOM(Document Object Model)和SAX(Simple API ...
实现了特殊的XML验证,一般来说使用SAXParser来读入XML文件再进行验证,但是这里使 用了边写边验证的功能,如果是...是Stax2 API提供的功能 java转换json或xml,支持Java和Json格式的互转,同时也支持Java和XML的互转
Streaming API for XML (StAX) 是Java中处理XML的一种高效且灵活的标准,相较于DOM和SAX,它在性能和易用性上有显著优势。StAX是JSR-173的一部分,于2004年3月发布,最终被纳入JAXP 1.4,也将在Java 6中得到支持。 ...
StAX是一种基于事件驱动的解析器,它允许程序员通过逐个处理XML事件(如开始元素、结束元素、文本等)来读取和写入XML文档,这种方式相比DOM(Document Object Model)更加轻量级和高效。 **StAX的优势** 1. **低...