c# - XPathDocument 与 XPathNavigator VS Xmlreader?

标签 c# .net xml performance

我看到了这个问题:

XPathDocument vs. XmlDocument

但它没有我正在寻找的信息: 我的问题:

我知道 XPathDocument 将完整 xml 加载到内存中:

我的问题来自 xml 已经加载的阶段:

其中哪一个将更快地找到所需的元素:

XPathDocument with XPathNavigator

xmlReader with If's conditions

最佳答案

如果通过

"the xml is already loaded"

你的意思是它已经被加载到 XPathDocument 或 XmlDocument 中,那么使用 XPathNavigator 或 XmlReader 的性能将是相同的。两者都将遍历代表 XPath 数据模型的已解析的内存中节点。

两者之间的主要区别是 XmlReader 将提供仅向前访问,而 XPathNavigator 提供对文档的游标访问。当您不想承担将整个文档加载到内存中的成本时,直接与 XmlReader 交互非常有用。否则它就没那么有用了。

我强烈建议使用 XPathNavigator。 您可以通过两种主要方式与 XPathNavigator 进行交互:

  1. 构建您的状态机(使用 if/elses)。使用 XPathNavigator 而不是 XmlReader 这样做的一大好处是,由于 XPathNavigator 的游标访问模型,您的状态机将大大简化。例如:需要查看父级是否具有特定属性?只需导航到它并查看即可。
  2. 使用 XPath 查询查找您要查找的数据。可能不会那么快,但可能会比构建自己的状态机更不容易出错。当然,这需要您精通 XPath。

关于c# - XPathDocument 与 XPathNavigator VS Xmlreader?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8688226/

相关文章:

c# - 是否有用于 Active Directory 查询的分析器?

c# - 使用 C# 或 F# 查找包括单个字符的字符串排列

c# - ObservableCollection到3个 ListView 中的1个,具体取决于某些属性

.net - Windows 窗体线程和事件 - 传递事件的最有效方法?

c# - 如何开始在 .NET 中创建应用程序 API

c# - 从接口(interface)派生的通用对象的 XML 序列化列表,,,

c# - Java Swing 与 C#.net 桌面数据库应用程序

c# - 如何将 char 转换为其完整的 Unicode 名称?

java - DrawerLayout - 文档中根元素后面的标记必须格式正确

android - 无效的可绘制标签动画矢量