【发布时间】:2011-09-05 08:52:18
【问题描述】:
我有一个应用程序,其中打开了包含用户输入的大量数据的 XLS 文件,并将其中的数据转换为 XML。我已经将 XLS 文件中的列映射到 XML 映射。当我尝试在 XMLMaps 中使用 ExportXml 方法时,我得到一个字符串,其中包含 XLS 文件的正确 XML 表示。我稍微解析一下这个字符串并将其上传到我的服务器。
问题是,当我的 XLS 文件非常大时,为 XML 生成的字符串超过 2 GB,并且出现内存不足异常。我了解 CLR 对象的限制为 2 GB。但就我而言,我需要处理这种情况。目前我只是发消息要求用户发送更少的数据。
关于如何做到这一点的任何想法?
编辑:
这只是我需要对生成的 XML 进行的操作的简要说明。
- 删除服务器数据不需要的某些字段。
- 为每行数据添加诸如 ID 号之类的内容。
- 修改某些元素的值。
- 对数据进行验证。
虽然 XMLReader 流是个好主意,但我无法通过该方法执行这些操作。虽然数据验证可以由 Excel 自己完成,但其他事情不能在这里完成。
使用 XMLTextReader 和 XMLTextWriter 并为每个步骤创建自定义方法是我想到的解决方案。但是要通过上面的 jist,它需要对 XML 文档进行 4 次遍历或处理。这只是效率不高。
【问题讨论】:
-
你能举一个你的xml内容的例子吗?
-
编辑标签以包含 Excel,因为您是从 Excel 导出的。还删除了 CLR,因为这个问题与特定的运行时或低级代码没有太大关系。如果您不同意,请随时再次编辑或回滚。
-
@Jon Egerton:类似于当年的销售订单。希望你明白了。
-
您不能将内容分成可管理大小的片段吗?
-
当你说你需要“删除某些字段”时,有多少整体数据被删除了?如果您要删除大量数据,请在导出到 XML 之前在 Excel 中执行此操作。这可能有助于将您的内存保持在 2GB 以内