我正在读取一个xml文件,如下所示:
<ts>
<tr comment="" label="tr1">
<node order="1" label="" />
</tr>
</ts>
我希望下面的代码能打印出三个 e
在屏幕上:
XMLInputFactory factory = XMLInputFactory.newInstance();
XMLStreamReader sr = factory.createXMLStreamReader(new FileReader("test.xml"));
while (sr.hasNext()) {
int eventType = sr.next();
if (eventType == XMLStreamReader.START_DOCUMENT) {
continue;
} else if (eventType == XMLStreamReader.END_ELEMENT) {
System.out.println("e");
} else if (eventType == XMLStreamReader.START_ELEMENT) {
System.out.println("s");
}
}
但它不起作用!有什么办法解决这个问题吗?
注:我认为这与自关闭标签有关,例如: <myTag id="1" />
2条答案
按热度按时间a0zr77ik1#
你问题中的代码产生了三个
e
对我来说这是意料之中的。我在mac上使用JDK1.6。演示
您可能需要尝试运行以下代码,以查看缺少哪个结束元素事件:
输出
下面是我得到的输出。
vngu2lb82#
我在windows上使用JDK1.7,得到的结果与blaise doughan相同:
我不认为这和
<node order="1" label="" />
因为文件规定:注意:空元素(例如
<tag/>
)将报告两个单独的事件:start\u element,end\u element-这将保留空元素到的解析等价性<tag></tag>
. 此方法将抛出IllegalStateException
如果它被召唤hasNext()
返回false。很可能是其他相关的代码导致了这种奇怪的行为?