在JDK 6.0中基于StAX分析XML数据(4) |
|
http://www.sina.com.cn 2006年06月13日 16:53 天极yesky |
|
六、 使用XMLEventReader进行分析
本节将向你展示如何使用XMLEventReader来分析catalog.xml。XMLEventReader接口使用一个事件对象迭代算子分析一个XML文档;通过这种方式,一个XML事件生成一个XMLEvent对象。XMLEventReader类似于XMLStreamReader-分析事件是由StAX分析器生成的。然而,XMLEventReader比XMLStreamReader有一个优点:通过使用XMLEventReader,一个应用程序可以使用peek()方法来"偷看"下一个事件,而不必从流中读取事件。这样,一个应用程序客户端可以决定是否有必要分析下一个事件。本节中的代码片断节选自XMLEventParser.java应用程序,请参见列表5。
首先,导入StAX类:
import javax.xml.stream.*; import javax.xml.stream.events.*; import javax.xml.stream.XMLInputFactory; | 接下来,创建一个XMLInputFactory,由它获得一个XMLEventReader对象:
XMLInputFactory inputFactory=XMLInputFactory.newInstance(); InputStream input=new FileInputStream(new File("C:/STAX/catalog.xml")); XMLEventReader xmlEventReader =inputFactory.createXMLEventReader(input); | 在StAX中,XML文档事件是通过XMLEvent对象描述的。使用nextEvent()方法来遍历XMLEventReader对象以获得下一个事件:
XMLEvent event=xmlEventReader.nextEvent(); | 使用getEventType()方法来获得事件类型(请参考表格1)。XMLEvent接口还提供布尔方法来获得事件类型。例如,isStartDocument()返回true,如果事件是开始文档类型。在下列代码中,事件是开始元素类型,因此一个StartElement对象可以从这个XMLEvent接口获得:
if(event.isStartElement()){ StartElement startElement=event.asStartElement(); } | 使用getAttributes()方法获得元素属性:
Iterator attributes=startElement.getAttributes(); | 这个Iterator描述了一个javax.xml.stream.events.Attribute对象。使用next()方法遍历该Iterator。
Attribute attribute=(javax.xml.stream.events.Attribute)(attributes.next()); | 最后,使用getName()方法获得属性命名,使用getValue()方法获得属性值。
列表5显示出分析该XML文档的Java应用程序。应用程序XMLEventReader可以作为一个命令行应用程序运行,或在一种例如Eclipse这样的IDE中运行。记住:如果你运行XMLWriter.java或XMLParser.java应用程序而不首先运行XMLEventParser.java应用程序,那么你将需要把catalog.xml复制到C:/StAX目录下。
最终,基于拉的事件生成把事件规则提供到分析器应用程序而不是提供到分析器。
[上一页] [1] [2] [3] [4]
|
| | |