无法解析 &使用 XML 工厂实例解析器从 XML 获取数据 [duplicate]

Unable to parse & data from XML using XML Factory Instance parser [duplicate]

提问人:rishabh 提问时间:12/28/2022 更新时间:12/28/2022 访问量:147

问:

我有一个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

但它像这样解析数据,只有“大米”(失踪和饮料) 预期产出:大米和饮料

有人可以建议“&”的问题是什么吗?(没有空格)以及如何修复?

Java XML XML 解析 &amp; 符号

评论


答:

1赞 Rob Spoor 12/28/2022 #1

我最近做过一个做XML解析的项目,所以我几乎确切地知道这里发生了什么:解析器将它视为一个单独的事件()。&amp;XMLStreamConstants.ENTITY_REFERENCE

尝试在 XML 解析器的选项中将 property 设置为。如果解析器已正确实现,则该实体将被替换并成为文本的一部分。XMLInputFactory.IS_REPLACING_ENTITY_REFERENCEStrue

请记住,解析器可以将其拆分为多个字符事件,尤其是在您有大段文本的情况下。将属性设置为应该可以防止这种情况。XMLInputFactory.IS_COALESCINGtrue

评论

0赞 skreutzer 12/29/2022
另一种选择是创建一个 on encountering 或用于将相应的字符收集到其中,包括手动去转义的文字(然后将它们转换回常规纯文本)。我假设您不仅以硬编码的方式访问下一个,而且确实有一个循环来收集/收集文本节点,直到遇到元素开始或结束(或文档结束或没有或其他)。StringBuilderisCharacters()getEventType() == XMLStreamConstants.ENTITY_REFERENCEnextEvent()hasNext()
0赞 rishabh 12/29/2022
非常感谢,将属性XMLInputFactory.IS_COALESCING设置为true对我有用,并解决了问题。