【发布时间】:2012-01-12 03:38:50
【问题描述】:
是否有任何方法(如果可能,使用 Java 代码示例)在不了解 XML 源(文件、字符串等)?
例如,假设一个具有未知结构和多个嵌套级别的非常大的 XML 数据集存储在一个大文本文件中。将所有内容读入内存是不可能的(因为空间不足),他们想直接将其转换为JSON,即,无需编写任何代码来检测和处理StAX标签(例如,START_ELEMENT、CHARACTERS , END_ELEMENT)。
理想的解决方案是从转换器获取Reader 或InputStream,例如,提供XML 文件,Reader 或InputStream 生成JSON,以供输入到 FileOutputStream,甚至直接到 JSON 解析器,如 Jackson。如果这是不可能的,那么至少一种渐进式读取 XML 文件、转换为 JSON 并写入另一个文件的方法是可以接受的折衷方案。
可用于从/转换为 XML/JSON 的工具(例如,StaxON、JSON-lib、Jettison、XStream)似乎不能这样做,而只能转换已知结构。
编辑: 从 OutputStream 或 Writer 获取 Reader 或 InputStream(这也包括我上面提到的“转换”),可以通过多种方式完成,尽管为了获得最佳结果和“无限”输入大小,涉及到多线程。在article in Ostermiller.org 中描述了解决方案,在IO-Tools library 中可以找到类似的实现。
【问题讨论】: