12

我知道,我知道这已经被做死了;我只是发布一个问题,看看这个解决方案是否仍然相关,因为现在我们有 .NET 4 和更新版本

此链接解释了一种读取大型 XML 文件的简单方法,它实现了 Linq。我非常喜欢这个,只是想要一个简单的答案来说明这是否仍然相关,或者在较新的 .NET 代码中是否有更好的实现。

4

4 回答 4

10

如果看起来像这样:

<root>
    <item>...</item>
    <item>...</item>
    ...
</root>

您可以像这样读取文件XmlReader并打开每个“项目” XmlDocument

reader.ReadToDescendant("root");
reader.ReadToDescendant("item");

do
{
    XmlDocument doc = new XmlDocument();
    doc.LoadXml(reader.ReadOuterXml());
    XmlNode item = doc.DocumentElement;

    // do your work with `item`
}
while (reader.ReadToNextSibling("item"));

reader.Close();

在这种情况下,您对文件大小没有限制。

于 2014-05-19T06:29:37.657 回答
10

这个问题的答案在 .NET 4 中没有改变——为了获得最佳性能,您仍然应该使用XmlReader,因为它将文档式传输而不是将整个内容加载到内存中。

您引用的代码XmlReader用于实际查询,因此在大型文档上应该相当快。

于 2012-10-17T10:07:33.707 回答
1

最好的方法是使用XmlReader.Create逐行读取。

var reader = XmlReader.Create(filename);
reader.WhitespaceHandling = WhitespaceHandling.None;
while (reader.Read())
{
    // your code here.
}
于 2012-10-17T10:17:11.753 回答
0

过去几天我一直在努力解决同样的问题。我只需右键单击项目属性,然后导航到Build 选项卡并选择选项Any CPU,勾选取消选中选项Prefer 32 Bit并在运行您的应用程序之前保存它,它对我有帮助。我附上了相同的快照。 在此处输入图像描述

于 2016-08-30T12:44:26.303 回答