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

5 c# xmltextreader xml-parsing

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

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

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

谢谢!

Jon*_*eet 7

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

int count = 0;
while (reader.ReadToFollowing(name))
{
    count++;
}
Run Code Online (Sandbox Code Playgroud)

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

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


Fur*_*dar 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++;
    }
}
Run Code Online (Sandbox Code Playgroud)