快速获取xml文档中元素数量的方法

时间:2012-10-20 18:08:14

标签: c# xml-parsing xmltextreader

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

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

所以问题是,如何才能快速获得这些元素的数量......是否有最佳实践,或者我应该首先阅读整个文档并编写类似i ++的内容; ?

谢谢!

2 个答案:

答案 0 :(得分:7)

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

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

然而,这确实意味着两次阅读文件......

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

答案 1 :(得分: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++;
    }
}