实际上,我正在重组一个现有的大型软件,并出于内存效率的目的切换XMLEventReader
到
。XMLStreamReader
考虑以下函数的定义,该函数当前仅读取 XML 事件并打印它们:
def evalStreamReader(source: StreamSource): Unit
val StreamReader = XMLInputFactory.newInstance().createXMLStreamReader(source)
while (StreamReader.hasNext) {
val eventType = StreamReader.getEventType
eventType match {
case 1 => println("Start Element " + eventType + " : " + StreamReader.getLocalName)
case 2 => println("End Element " + eventType + " : " + StreamReader.getLocalName)
case 4 => println("Characters " + eventType + " : " + StreamReader.getText)
case 7 => println("Start Document " + eventType)
case 8 => println("End Document: " + eventType)
}
StreamReader.next()
}
}
和简单的 XML 文件:
<a>
<c></c>
</a>
输出将是:
Start Document 7
Start Element 1 : a
Characters 4 :
Start Element 1 : c
End Element 2 : c
Characters 4 :
End Element 2 : a
无论如何我可以END_DOCUMENT
在条件/案例匹配中单独/正确处理事件While
,而不是在循环之外?我尝试了很多条件,do while
但没有成功。
这个想法是StreamReader.next()
将光标切换到END_DOCUMENT
事件并hasNext
通过其在 API 中的定义返回 false:
boolean hasNext()
throws XMLStreamException
Returns true if there are more parsing events and false if there are no more events.
This method will return false if the current state of the XMLStreamReader is END_DOCUMENT