我希望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”并且通常首先跳转到“缩略图”,即使在之前的调试会话中它似乎表现得更加随机。 帮助!
不过,代码非常简单: 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.
答案 0 :(得分: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