Java StAX:XMLStreamReader-游标API
时间:2020-01-09 10:36:31 来源:igfitidea点击:
Java StAX中的XMLStreamReader类提供了一种用于解析XML的Cursor风格的API。像IteratorAPI一样,它允许我们在XML中的事件之间移动,从而可以控制何时移动到下一个事件。例如,在这种情况下,"事件"是元素的开头,元素的结尾,一组文本等。换句话说,我们从SAX解析器获得的事件几乎相同。
要了解有关Iterator和Cursor风格API之间的区别的更多信息,请阅读StAX简介:Java StAX Parser
我们可以通过javax.xml.stream.XMLInputFactory类创建一个XMLStreamReader。这是一个JavaXMLStreamReader示例:
XMLInputFactory factory = XMLInputFactory.newInstance();
//get Reader connected to XML input from somewhere..
Reader reader = getXmlReader();
try {
XMLStreamReader streamReader =
factory.createXMLStreamReader(reader);
} catch (XMLStreamException e) {
e.printStackTrace();
}
创建完成后,我们可以遍历底层Reader的XML输入。看起来是这样的:
XMLStreamReader streamReader = factory.createXMLStreamReader(
new FileReader("data\test.xml"));
while(streamReader.hasNext()){
streamReader.next();
if(streamReader.getEventType() == XMLStreamReader.START_ELEMENT){
System.out.println(streamReader.getLocalName());
}
}
我们可以通过调用XMLStreamReader.getEventType()方法来获取事件类型。当我们知道事件类型时,可以根据需要处理给定事件。
XML流事件
以下是我们在XML流中可能遇到的事件的列表。在接口javax.xml.stream.XMLStreamConstants中,每个事件都有一个常量。
- ATTRIBUTE
- CDATA
- CHARACTERS
- COMMENT
- DTD
- END_DOCUMENT
- END_ELEMENT
- ENTITY_DECLARATION
- ENTITY_REFERENCE
- NAMESPACE
- NOTATION_DECLARATION
- PROCESSING_INSTRUCTION
- SPACE
- START_DOCUMENT
- START_ELEMENT
XML事件处理
从XMLStreamReader中,我们可以访问相应的XML数据。我们还可以获取有关在XML流中遇到事件的位置(行号+列号)的信息。

