0

我希望 XmlStreamReader 从文档的开头开始(显然),然后在我调用 next() 时跳转到 XML 文档的根。然而,可怕的是,我看到它跳转到第一个标签,里面有文本,总是省略根,经常(???)第二个标签。

文档如下所示:

<?xml version="1.0" encoding="UTF-8"?>
<objektliste xmlns="http://www.pixelboxx.de/ns/erco/translations/1.0">
  <uebersetzungen key="122671" attribute="7505">
    <thumbnail>abrakadabra.jpg</thumbnail>
    <text sprache="1031">We like the abla abla abla</text>
    <text sprache="2057">We like the spoonBlaBlaBla[en]</text>
    <text sprache="1036">Wicher</text>
  </uebersetzungen>
  <uebersetzungen key="122679" attribute="7505">
    <thumbnail>122679.jpg</thumbnail>
    <text sprache="1031">Kiefer</text>
    <text sprache="1036">franek</text>
  </uebersetzungen>
</objektliste>

我会发疯吗,我的日食会发疯还是我看不到明显的东西?该程序似乎总是省略“objektliste”并且通常首先跳转到“thumbnail”,尽管在以前的调试会话中它似乎表现得更加随机。帮助!!!

顺便说一句,代码非常简单:

    XMLStreamReader streamReader = factory.createXMLStreamReader( is);

    while( streamReader.hasNext())
    {
//event type 7 here, everything seems to be ok. 
        streamReader.next();
//bang! armaggeddon - skips the root, jumps to thumbnail.
4

1 回答 1

1

调用streamReader.next()是基于事件的。

next() 方法使读取器读取下一个解析事件。next() 方法返回一个整数,用于标识刚刚读取的事件类型。

可以使用 getEventType() 确定事件类型。

我认为您可能会遇到结束元素事件出现的问题,而您却没有预料到。

使用以下代码,我看到按预期处理正确的顺序:

XMLInputFactory factory = XMLInputFactory.newInstance();
XMLStreamReader streamReader = factory.createXMLStreamReader(is);

while( streamReader.hasNext()) {
  int eventType = streamReader.next();
  switch (eventType) {
      case XMLStreamReader.START_ELEMENT:
          String elementName = streamReader.getLocalName();
          System.out.println("Element: " + elementName);
          break;
      case XMLStreamReader.END_ELEMENT:
          break;
  }
}

这会产生预期的输出:

Element: objektliste
Element: uebersetzungen
Element: thumbnail
Element: text
Element: text
Element: text
Element: uebersetzungen
Element: thumbnail
Element: text
Element: text
于 2016-03-30T23:12:21.453 回答