c# - 在 XML 文件中查找节点 - C# 中的性能改进

标签 c# xml performance

假设我需要使用 C# 在 XML 文件中查找特定节点。

<node attribute="my-target-attribute">

“my-target-attribute”是运行时的变量输入。

节点在 XML 文件中没有特定位置,我基本上只需要扫描整个 XML 层次结构,直到找到具有匹配属性的节点。

有什么方法可以预处理 XML 以便更快地找到节点?我需要保留原始 XML 结构。 XML 文件可能有 10,000 个节点。

最佳答案

您当然可以预处理 XML 以加快查找速度:

Dictionary<string, XmlElement> elementMap = new Dictionary<string, XmlElement>();
AddElementToMap(doc.DocumentElement, elementMap);
...
private void AddElementToMap(XmlElement elm, Dictionary<string, XmlElement> elementMap)
{
   elementMap[elm.GetAttribute("attribute")] = elm;
   foreach (XmlElement child in elm.SelectNodes("node"))
   {
      AddElementToMap(child, elementMap);
   }
}

完成此操作后,查找很简单:

XmlElement elm = elementMap[value];

该代码假定文档中的每个元素都被命名为“节点”,每个元素都有一个名为“attribute”的属性,并且所有属性值都是唯一的。如果这些条件中的任何一个不为真,代码就会更加复杂,但并非特别如此。

关于c# - 在 XML 文件中查找节点 - C# 中的性能改进,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1760633/

相关文章:

c# - 方法 : params string[] with one parameter and single string

c# - 在 Windows 上添加/删除设备时未收到蓝牙事件

java - 没有值插入时按钮 onclick 崩溃

java - 如何在checkstyle中的 "excludedClasses"中设置默认+自己的类

javascript - Google Closure 库的基准测试

c# - 有没有办法在构造函数中强制显式参数类型?

c# WebResponse内容长度限制

java - 转换 XML 以声明根元素上的所有命名空间

eclipse - 让 Eclipse 更 slim

c# - 使用 Visual Studio 2010 时 32 位和 64 位操作系统之间的性能差异?