在XMLReader和XMLDocument之间获取不同的数量

时间:2013-02-07 16:23:30

标签: c# xml xml-parsing streaming

我有一个用C#编写的进程,它读取大型XML文件,有些超过1Gb(目前最大的是5Gb)。我们知道从开始就会有大文件,所以我们使用XMLReader而不是使用XMLDocumentReader。过程如下:

var i = from x in StreamRecords(fileName, "Active")
select x;

foreach (var item in newActiveNames)
        {
            var y = (from j in item.Descendants()) ///etc...

 private static IEnumerable<XElement> StreamEntities(string fileName, string Type)
    {
        using (var rdr = XmlReader.Create(fileName))
        {
            rdr.MoveToContent();
            rdr.ReadToDescendant(Type);
            while (rdr.Read())
            {
                if ((rdr.NodeType == XmlNodeType.Element) && (rdr.Name == "Item"))
                {
                    var e = XElement.ReadFrom(rdr) as XElement;
                    yield return e;
                }
            }
            rdr.Close();
        }
    }

这为我们提供了文件中所有活动项目(我们也可以使用非活动项目)。

无论如何,我们已经运行了很多文件,而且大多数是盛大的,但是我们发现发送给我们的一些文件没有格式化,并且它们返回正好一半预期的项目。我使用XMLDocumentReader写了相同的代码:

d.Load(fileName);
XmlNodeList list = d.SelectNodes("Active/Items", mgr); //mgr is the namespace manager

和List.Count返回正确的数字(完全是流代码结果的两倍)。

我尝试使用IgnoreWhitespace选项作为答案to this question,但没有运气......任何想法?

[更新]所以,我虽然得到了答案,但似乎我没有...在这方面多一点,因为我现在比昨天更加迷失:

似乎是导致问题的格式不正确的文件。如果我在XML Spy中打开文件,格式化并保存它,我得到正确的结果......我可以回到某些人并要求启用格式化的新转储,但现在我想弄清楚为什么如果格式没有缩进,则XMLReader会出现问题... 非常困惑

0 个答案:

没有答案