我有一个应用程序,其中包含用户输入的大量数据的 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 有那么大,那么您可以使用 Export 到临时文件,而不是使用 ExportXML 到字符串 - http://msdn.microsoft.com/en-us/library/microsoft.office.interop.excel.xmlmap.export.aspx
如果您随后需要在 C# 中解析/处理 XML,那么为了处理如此大的 XML 结构,您最好实现一个在流级别工作的自定义 XMLReader(或 XMLWriter)。请参阅此问题以获取一些类似的建议 - What is the best way to parse large XML (size of 1GB) in C#?
关于c# - 处理超过 2 GB 的字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7305776/