【发布时间】:2017-01-18 19:57:26
【问题描述】:
我有一个正在解析的 XML 文档,其中包含这样的元素...
<item>
<g:product_type>Accessories</g:product_type>
<g:item_group_id>85953</g:item_group_id>
<g:tax>
<g:country>US</g:country>
<g:rate>0.00</g:rate>
</g:tax>
</item>
注意像 product_type 和 item_group 这样的元素有文本值,但 tax 元素有子元素(没有自己的文本值)。
我正在用 XMLEventReader 解析它,如果一个元素有文本,那么我想打印它....
XMLInputFactory inputFactory = XMLInputFactory.newInstance();
InputStream in = read();
XMLEventReader eventReader = inputFactory.createXMLEventReader(in);
while (reader.hasNext()){
XMLEvent event = reader.nextEvent()
if (event.isStartElement() ){
System.out.println("The value is" + reader.elementText);
}
}
但是现在因为我有一个没有文本的元素,它会给出这样的错误..
elementGetText() function expects text only elment but START_ELEMENT was encountered.
at com.sun.org.apache.xerces.internal.impl.XMLStreamReaderImpl.getElementText(XMLStreamReaderImpl.java:851)
at com.sun.xml.internal.stream.XMLEventReaderImpl.getElementText(XMLEventReaderImpl.java:188)
如何修改上面的代码,以便 XMLEventReader 忽略这些没有文本的元素?我在java docs 中没有看到任何内容来检查元素是否为文本。
【问题讨论】:
-
是否需要 sax,或者您会对比使用 stax 更简单的解决方案感兴趣?
标签: java xml xml-parsing stax