是否有最佳做法从XML文档中获取元素数量以用于进度报告? 我有一个2 GB的XML文件,其中包含我需要处理的航班,我的想法是首先获取文件中所有元素的数量,然后使用计数器显示x个x航班被导入我们的数据库。
对于文件处理,我们使用.NET(C#)中的XmlTextReader来获取数据而不将整个文档读入内存(类似于sax解析)。
所以问题是,如何才能快速获得这些元素的数量......是否有最佳实践,或者我应该首先阅读整个文档并编写类似i ++的内容; ?
谢谢!
答案 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++;
}
}