我正在用 java 解析一个(格式不正确的)Apple Plist 文件。
我的代码如下所示:
InputStream in = new FileInputStream( "foo" );
XMLInputFactory factory = XMLInputFactory.newInstance();
XMLEventReader parser = factory.createXMLEventReader( in );
while (parser.hasNext()){
XMLEvent event = parser.nextEvent();
//code to navigate the nodes
}
我正在解析的部分看起来像这样:
<dict>
<key>foo</key><integer>123</integer>
<key>bar</key><string>Boom & Shroom</string>
</dict>
我现在的问题是,包含 & 符号的节点没有按照应有的方式进行解析,因为 & 符号代表一个实体。
我该怎么做才能将节点的值作为完整的字符串而不是损坏的部分获取?
提前谢谢你。
最佳答案
您应该能够通过在 XMLInputFactory
上设置 IS_COALESCING
属性来解决您的问题(我也更喜欢 XMLStreamReader
而不是 XMLEventReader
, 但是 ymmv):
XMLInputFactory factory = XMLInputFactory.newInstance();
factory.setProperty(XMLInputFactory.IS_COALESCING, Boolean.TRUE);
InputStream in = // ...
xmlReader = factory.createXMLStreamReader(in, "UTF-8");
顺便说一下,据我所知,没有一个 JDK 解析器可以在不阻塞的情况下处理“格式不正确”的 XML。事实上,您的 XML 格式正确:它使用实体而不是原始的 & 符号。
关于Java Plist XML 解析,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2451170/