6

是否存在从 XML 文档中获取元素数量以用于进度报告的最佳实践?我有一个 2 GB 的 XML 文件,其中包含我需要处理的航班,我的想法是首先获取文件中所有元素的数量,然后使用计数器显示 x 个航班中的 x 个已导入我们的数据库。

对于文件处理,我们使用 .NET (C#) 中的 XmlTextReader 来获取数据,而无需将整个文档读入内存(类似于 sax 解析)。

所以问题是,我怎样才能很快得到这些元素的数量......是否有最佳实践,或者我应该先浏览整个文档并执行 i++ 之类的操作;?

谢谢!

4

2 回答 2

7

您当然可以只阅读文档两次 - 一次来简单地计算元素(XmlReader.ReadToFollowing例如,继续使用(或可能ReadToNextSibling)增加一个计数器:

int count = 0;
while (reader.ReadToFollowing(name))
{
    count++;
}

但是,这确实意味着两次读取文件......

另一种方法是查找文件的长度,并在您通读一次文件时,根据底层流的位置报告到目前为止处理的文件的百分比。这将不太准确,但效率更高。您需要XmlReader直接从 a创建,Stream以便您可以继续检查位置。

于 2012-10-20T18:13:56.780 回答
1
int count = 0;
using (XmlReader xmlReader = new XmlTextReader(new StringReader(text)))
{
    while (xmlReader.Read())
    {
        if (xmlReader.NodeType == XmlNodeType.Element &&
            xmlReader.Name.Equals("Flight"))
            count++;
    }
}
于 2012-10-20T18:10:47.447 回答