c# - 处理超过 2 GB 的字符串

标签 c# xml string excel

我有一个应用程序,其中包含用户输入的大量数据的 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/

相关文章:

javascript - 将段落拆分为数组 javascript

c - 获取文本而不是 EOF

c# - 用 c++ 或 c# 玩游戏?

c# - NSOutlineView 的突出显示行

c# - 异常与特殊返回值

java - JAXB - 如何以两种方式解析元素

java - 计算字符串的长度和 "padding"it

c# - 存储矢量 XNA 动画

c# - 将 XML 数据从 C# 传递到 Java?

javascript - 如何找到使用 Javascript 工具提示定义的 Web 元素的 Xpath?