Java StAX:XMLStreamReader-游标API
时间:2020-01-09 10:36:31 来源:igfitidea点击:
Java StAX中的XMLStreamReader类提供了一种用于解析XML的Cursor风格的API。像Iterator
API一样,它允许我们在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流中遇到事件的位置(行号+列号)的信息。