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

标签 c# xml-parsing xmltextreader

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

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

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

谢谢!

最佳答案

您当然可以只阅读文档两次 - 一次只是对元素进行计数(例如,继续使用 XmlReader.ReadToFollowing,(或者可能是 ReadToNextSibling)增加一个计数器作为你去:

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

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

另一种方法是找到文件的长度,当你通读文件一次时,根据底层流的位置。这将不太准确,但效率更高。您需要直接从 Stream 创建 XmlReader,这样您就可以继续检查位置。

关于c# - 获取xml文档中元素数量的快速方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12991256/

相关文章:

c# - DataGrid 的 Columns 集合中已存在 header 为 '*' 的 DataGridColumn

c# - 如何在 XmlNodeList 的 foreach 中使用反向?

java - 在 Java 中针对 XSD 验证 XML/获取 schemaLocation

asp.net - 如何将 XML 作为字符串从 XmlTextReader 输出到 Response.Write 中?

.net - 如何从 C# 中的文件中删除字符的所有实例?

c# - XMLTextReader 不读取元素内容

c# - 访问 ASP.NET Core 2.2 类库中的 HttpContext

c# - EFCore 2.2.6 与 5.0.8 无跟踪

c# - 使用 C# 以编程方式创建并信任 SSL 证书?

java - 如何使用 Xpath 在 XML 树的节点后检索节点?