我有一个大尺寸的 xml 文件,大小从 500 mb 到 2 GB 不等,我想对其进行验证 例如自定义标签和其他验证的总数。我的问题是有一个好方法可以让我整理 完整的xml文件到java对象没有OutOfMemory异常?我不认为这是可能的,因为我有 2 GB 的 RAM 内存大小为 1536 MB。但是,还有什么选择呢?
我应该使用 STAX/SAX 将 xml 拆分为更小的 xml 文件,然后拥有单独的对象吗?然后统计顾客 每个java对象中的元素。将其存储为实例变量,然后为进一步的 xml 重复它。汇总所有客户 很重要。如果是,我怎么知道分解的 xml 是单个 xml 的一部分。可能我需要引入一些相关 ID 在文件名中以便我可以知道单独的 xml 节点是单个 XML 节点的一部分?
最佳答案
为了解析您提到的大小的 xml [最多 2GB],您不必将其全部加载到 RAM 中。您可以使用 SAX 解析器来解析它。 Here我发现了一种有趣的方法
XMLReader r = new XMLReader();
r.addHandler("node", new NodeHandler() {
@Override
public void process(StructuredNode node) {
System.out.println(node.queryString("name"));
System.out.println(node.queryValue("price").asDouble(0d));
}
});
r.parse(new FileInputStream("src/examples/test.xml"));
基本上它是 SAX 和 DOM 的混合体。它为需要处理一些数据的元素创建 do 。此代码已获得 MIT 许可,可以在 here 找到。
如果上述对您来说不可行,我建议您应该使用普通的 StAX 解析器 Here是一个很好的入门教程
关于java - 将大型 XML 文件转换为 java 对象?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23235766/