Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/21.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# 可折叠XML读取器_C#_.net - Fatal编程技术网

C# 可折叠XML读取器

C# 可折叠XML读取器,c#,.net,C#,.net,我已经查过谷歌了,结果还是空的。在开始编写自己的XML解析器之前,我想在这里问一下:我正在寻找一个低资源、快速、可回放(或仅向后、非缓存)的XML读取器。由于我正在使用的某些数据结构,与.NET一起提供的仅向前的XMLReader将花费大量的时间/资源来进行我想要的解析,并且使用XMLDocument将整个文档加载到内存中最终会使机器崩溃 那么,有没有人知道一种方法可以让XMLReader从一个元素向后搜索到另一个元素(而不会产生一些疯狂的开销)?或者有人知道向后搜索的XML阅读器吗?还是我应该

我已经查过谷歌了,结果还是空的。在开始编写自己的XML解析器之前,我想在这里问一下:我正在寻找一个低资源、快速、可回放(或仅向后、非缓存)的XML读取器。由于我正在使用的某些数据结构,与.NET一起提供的仅向前的XMLReader将花费大量的时间/资源来进行我想要的解析,并且使用XMLDocument将整个文档加载到内存中最终会使机器崩溃

那么,有没有人知道一种方法可以让XMLReader从一个元素向后搜索到另一个元素(而不会产生一些疯狂的开销)?或者有人知道向后搜索的XML阅读器吗?还是我应该写我自己的读者

谢谢,
-R

您可以尝试使用DataSet.ReadXML()将XML文件加载到DataSet对象中。它适用于许多格式清晰的XML文件(大小小于1GB)。然后,您可以使用DataTable.Select语法在数据集中的DataTables中搜索数据

如果您有一个示例XML文件,您可以尝试使用我制作的玩具应用程序加载它,该应用程序将XML加载到数据集中,并在网格中显示数据表以进行编辑:。这将显示您的XML是否完全适合数据集中

显然,正如我在上面的评论中提到的,40GB太大了,无法使用任何工具在XML中处理—它应该在数据库中

项目来源于:

对于所有对此投反对票的人,请注意事件的时间表:

5 hours ago - asked (with no size criteria) and initially answered as above
4 hours ago - size criteria mentioned
4 hours ago - My comment: too big for XML, use a database
在不久的将来,文件大小可能会突破40GB的限制


XML并不是您想要做的事情的好候选。数据库处理如此大的数据量将更加高效。您应该将XML中的数据加载到数据库中,然后才能处理该数据库。

在处理XML文件之前,如何反转XML文件?是否可以提供XML以及您希望如何处理它?你的问题很普通,现在你每天都有比随附的
XMLReader
更好的选择。我会尝试找到另一种保存数据的方法,而不是寻找快速、可倒带的XML阅读器。40GB的xml文件是不正常的。40GB太大了,不能和xml混在一起,它是一种效率极低的存储格式。这种大小的数据通常需要放在数据库中才能进行有效搜索。@RonSavage:Post 40GB的XML?这不是将整个XML加载到内存中吗?它将XML中的数据加载到内存中,但将XML解析出来,所以内存中的数据大小与XML文本的大小不同。的确,但在这种情况下,我不想将任何不是我正在解析的结构的一部分的东西加载到RAM中。-1
40GB太大了,无法处理XML,它是一种效率极低的存储格式。这种大小的数据通常需要存储在数据库中,以便高效搜索
,我认为这是最正确的answer@RonSavage
您可以尝试使用DataSet.ReadXML()将XML文件加载到DataSet对象中。
真的吗?40GB xml数据?有趣:)那你说的有什么不同呢@RonSavage谁在两小时前评论了?@L.B,完全不同。。。Ron Savage建议使用DataTables,这意味着将数据存储在内存中。我建议在从XML读取数据时直接将值插入数据库。
40GB太大了,不能与XML混为一谈,它是一种效率极低的存储格式。这种大小的数据通常需要存储在数据库中,以便高效搜索
@L.B,我是这么说的。。。我说过XML对于40GB的数据来说效率很低,相反,它应该存储在数据库中。现在,OP可能正在以XML的形式接收数据,在这种情况下,他需要将数据存储在数据库中。我不明白你为什么否决了我的答案,因为我的答案与你所说的完全一致。很抱歉,你是对的,但你给出的答案与@RonSavage的评论相同,但他似乎在回答中改变了主意。(在您编辑答案之前,我的上传将被阻止。)