【问题标题】:Large xml to csv in c#c#中的大xml到csv
【发布时间】:2013-09-10 12:54:03
【问题描述】:

我需要将大约 2gb 的大型 xml 文件转换为 csv。因此,我会遇到内存不足异常,因为 xmldocument() 无法将整个文件加载到内存中。我曾尝试使用 xml 阅读器,但我不确定如何在没有 xml 的 dtd 的情况下进行操作

我在 c# 中有我的代码

【问题讨论】:

  • 听起来像是 SSIS 的工作。
  • 你能发布一个xml的例子吗?
  • 如果这是累积的数据,将来会进一步增长,那么 CSV 不会长期为您提供帮助。您可能需要考虑切换到数据库。
  • 你会如何使用XmlDocument
  • XML 是为了顺序读取而设计的,所以一般情况下不需要将整个文件加载到内存中。

标签: c# .net xml csv


【解决方案1】:

如果您在 64 位上运行并希望快速修复 OutOfMemoryException:转到您的项目属性 -> 构建选项卡 -> 平台目标:将“任何 CPU”更改为“x64”。

您将能够在 Xdocument 中加载 2GB XML 文件。

【讨论】:

    【解决方案2】:

    使用 XmlReader 类解析 xml 的 Microsoft 开发人员只需将以下两行添加到他们的代码中,以防止 XmlReader 访问 DTD 声明中引用的 URI:

    settings.ProhibitDtd = false;
    settings.XmlResolver = null;
    

    其中 settings 是 XmlReaderSettings 类的一个实例。为 ProhibitDtd 分配一个 false 值将防止 XmlReader 在遇到 DTD 引用时抛出异常,而将其设置为 true 将导致读取器中止进一步的解析。将 XmlResolver 设置为 null 会导致阅读器忽略外部引用的 DTD。这允许读者在不访问外部引用的 DTD 的情况下解析整个 xml 文档。

    引用自: http://xponentsoftware.com/articles/Http_overload.aspx

    此外,OP 指出 dtd 文件不可用。在这种情况下,将 ProhibitDtd 设置为 false 是不够的,因为如果找不到 dtd 文件,则会引发异常。将 XmlResolver 设置为 null 可以解决该问题。

    【讨论】:

      【解决方案3】:

      你为什么不能这样做http://danbarnett.net/how-to-convert-large-xml-files-to-csv-78.html 或者使用 vtd-xml http://vtd-xml.sourceforge.net/

      使用 vtd-xml 对您来说应该相当简单

      【讨论】:

      • 我找不到任何关于它的教程。我如何使用dll,你有什么例子吗?或者我可以遵循的任何教程以更好地理解它
      【解决方案4】:

      使用 XmlReader 时默认禁用 DTD 处理。 与基本 StreamWriter 关联的 XmlReader 对我们来说很有效,因为我们处理的文件大约为 200 mb。

      【讨论】:

        猜你喜欢
        • 2015-09-15
        • 1970-01-01
        • 2014-01-09
        • 1970-01-01
        • 1970-01-01
        • 2018-09-03
        • 1970-01-01
        • 2021-10-13
        • 2015-08-22
        相关资源
        最近更新 更多