是否有可能/有一种简单的方法来查找与START_ELEMENT相对应的结束标记(END_ELEMENT),如下所示?
while(reader.hasNext()){
XMLEvent event = reader.nextEvent();
if(event.getEventType() == XMLEvent.START_ELEMENT){
StartElement startElement = event.asStartElement();
System.out.println(startElement.getName().getLocalPart());
}
}
答案 0 :(得分:1)
如果您通过简单方式调用返回结束元素的简单方法,则答案是否定的。 SAX解析器是基于事件的解析器,因此它会读取您的XML文件并创建事件。由您来处理这些事件并在这些事件发生时构建您的内存结构。
也许你应该使用一个DOM解析器来构建内存中的XML结构,你可以在其中导航。或者使用一些xml bindig(例如JAXB)将XML转换为java对象,反之亦然。
答案 1 :(得分:0)
我能想到的最简单的方法是:
StreamFilter
,其内部深度计数器;其accept
方法将:
START_ELEMENT
事件时递增,每次有END_ELEMENT
事件时递减true
FilterReader
读取orignal流:然后
if(event.getEventType() == XMLEvent.START_ELEMENT){
StartElement startElement = event.asStartElement();
System.out.println(startElement.getName().getLocalPart());
if (/* you want the end of this start tag */) {
Reader forwardToMatchingEndReader = xmlInputFactory.createFilterReader(reader, filter)
XMLEvent matchingEndEvent = forwardToMatchingEndReader.next();
}
}