提问人:rishabh 提问时间:12/28/2022 更新时间:12/28/2022 访问量:147
无法解析 &使用 XML 工厂实例解析器从 XML 获取数据 [duplicate]
Unable to parse & data from XML using XML Factory Instance parser [duplicate]
问:
我有一个XML需要使用XMLInputFactory(java.xml.stream)解析。 XML 属于以下类型:
<SACL>
<Criteria>Dinner</Criteria>
<Value> Rice & amp ;(without spaces) Beverage </Value>
</SACL>
我正在使用 JAVA 中的 XML Factory Reader 解析它,我的代码是:
if(xmlEvent.asStartElement().getName().getLocalPart().equals("Value"){
xmlEvent = xmlEventReader.nextEvent();
value = xmlEvent.asCharacters().getData().trim(); //Issue is in the if bracket only
}
(xmlEventReader = XMLInputFactory.newInstance().createXMLEventReader(new FileInputStream(file.getPath())); //using java.xml.stream.XMLEventReader
但它像这样解析数据,只有“大米”(失踪和饮料) 预期产出:大米和饮料
有人可以建议“&”的问题是什么吗?(没有空格)以及如何修复?
答:
1赞
Rob Spoor
12/28/2022
#1
我最近做过一个做XML解析的项目,所以我几乎确切地知道这里发生了什么:解析器将它视为一个单独的事件()。&
XMLStreamConstants.ENTITY_REFERENCE
尝试在 XML 解析器的选项中将 property 设置为。如果解析器已正确实现,则该实体将被替换并成为文本的一部分。XMLInputFactory.IS_REPLACING_ENTITY_REFERENCES
true
请记住,解析器可以将其拆分为多个字符事件,尤其是在您有大段文本的情况下。将属性设置为应该可以防止这种情况。XMLInputFactory.IS_COALESCING
true
评论
0赞
skreutzer
12/29/2022
另一种选择是创建一个 on encountering 或用于将相应的字符收集到其中,包括手动去转义的文字(然后将它们转换回常规纯文本)。我假设您不仅以硬编码的方式访问下一个,而且确实有一个循环来收集/收集文本节点,直到遇到元素开始或结束(或文档结束或没有或其他)。StringBuilder
isCharacters()
getEventType() == XMLStreamConstants.ENTITY_REFERENCE
nextEvent()
hasNext()
0赞
rishabh
12/29/2022
非常感谢,将属性XMLInputFactory.IS_COALESCING设置为true对我有用,并解决了问题。
评论