java - 将大型 XML 文件转换为 java 对象?

标签 java xml marshalling

我有一个大尺寸的 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/

相关文章:

java - LOGGER.info 和 LOGGER.debug 显示为红色,且无法解析方法

PHP GMAIL 使用 DOMDocument 和 cURL 接触 XML 解析

c# - 使用 COPYDATASTRUCT 将 SendMessage 的 C++ 转换为 C#

c# - 将引用类型对象的数组从 C# 编码到 C++

java - 类和对象的概念

java - 在除我自己的设备(奥利奥)之外的其他设备中从相机 Intent 检索图片时出现问题

java - 无法获得 instagram 个人资料图片全尺寸

sql-server - 使用同一行中的另一个列值更新 SQL Server 2005 中的 XML 节点(在 XML 列中)

regex - 将字符串格式化为XML文件

C#/C++ 互操作 - 需要帮助定义我的数据结构