繁体   English   中英

在C#中将大型XML转换为CSV

[英]Large xml to csv in c#

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

我在C#中有我的代码

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

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

当您使用XmlReader时,默认情况下将禁用DTD处理。 与基本StreamWriter关联的XmlReader对我们而言非常有效,因为我们处理的文件大小约为200 mb。

使用XmlReader类来解析xml的Microsoft开发人员仅需在其代码中添加以下两行,即可防止XmlReader访问DTD声明中引用的URI:

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

其中settings是XmlReaderSettings类的实例。 为ProhibitDtd分配错误值将防止XmlReader在遇到DTD引用时引发异常,而将其设置为true将会导致读取器中止进一步的解析。 将XmlResolver设置为null会导致阅读器忽略外部引用的DTD。 这使读者可以解析整个xml文档,而无需访问外部引用的DTD。

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

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM