Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# c中的大型xml到csv#_C#_.net_Xml_Csv - Fatal编程技术网

C# c中的大型xml到csv#

C# c中的大型xml到csv#,c#,.net,xml,csv,C#,.net,Xml,Csv,我需要将一个大约2gb的大型xml文件转换为csv。因此,我将遇到内存不足异常,因为xmldocument()无法将整个文件加载到内存中。我已经尝试过使用xml阅读器,但我不确定在没有xml的dtd的情况下如何使用它 我的代码是c#当您使用XmlReader时,默认情况下DTD处理被禁用。 与基本StreamWriter关联的XmlReader对我们来说非常有效,因为我们处理的文件大小约为200 mb。为什么您不能这样做 或者使用vtd xml 使用vtd xml应该非常简单Microsoft开

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


我的代码是c#

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

为什么您不能这样做 或者使用vtd xml


使用vtd xml应该非常简单Microsoft开发人员使用XmlReader类解析xml只需在其代码中添加以下两行代码,即可防止XmlReader访问DTD声明中引用的URI:

settings.ProhibitDtd = false;
settings.XmlResolver = null;
其中设置是XmlReaderSettings类的实例。在遇到DTD引用时,为toProhibitDtd赋值为false将防止XmlReader引发异常,而将其设置为true则会导致读取器中止进一步的解析。将XmlResolver设置为null会导致读取器忽略外部引用的DTD。这允许读者解析整个xml文档,而无需访问外部引用的DTD

引自:


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

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


您可以在Xdocument中加载2GB XML文件。

听起来像SSI的工作。您可以发布一个XML示例吗?如果这是累积的数据,将来会进一步增长,CSV对您的帮助不会太长。你可能想考虑切换到一个数据库。你将如何使用<代码> XMLordObj/<代码>?XML是用于顺序读取的,所以一般不需要将整个文件加载到内存中。我找不到任何教程。我如何使用dll,你有什么例子吗?或者任何我能更好理解的教程