XMLEventReader的当前事件

时间:2012-02-28 07:07:51

标签: java iterator stax

来自XMLEventReader

String getElementText()
Reads the content of a text-only element. 
Precondition: the current event is START_ELEMENT.
Postcondition: the current event is the corresponding END_ELEMENT.

这里提到的XMLEventReader的“当前”事件是什么?

是该读者最后一次调用返回的事件:

a)到nextEvent()或者 b)到peek()

从上一个问题的答案中,您如何解释StAX'ing up XML的清单2中的此代码段:

while (reader.hasNext()) {
    XMLEvent event = reader.peek();
    if (event.isStartElement()) {
        StartElement start = event.asStartElement();
        if (ICON.equals(start.getName())) {
            System.out.println(reader.getElementText());
            break;
        }
    }
    reader.nextEvent();
}

我遇到了ParseError: parser must be on START_ELEMENT to read next text

1 个答案:

答案 0 :(得分:1)

请注意,.peek()未从流中读取。 .peek()的文档说:

  

检查下一个XMLEvent而不从流中读取它。返回   如果流位于EOF或不再有XMLEvents,则返回null。打电话给   peek()将等于next()的下一次返回。

因此,指针的位置不会改变。因此,您可能不在START_ELEMENT,但最有可能在START_DOCUMENT。请致电.nextEvent()而不是.peek(),这应该会让它发挥作用。

祝你好运, 最大