我建议不要滚动自己的哈希创建函数,而要依赖内置
XNodeEqualityComparer的
GetHashCode方法。这样可以确保在创建结果时考虑到属性和后代节点,也可以节省一些时间。
您的代码如下所示:
XNodeEqualityComparer comparer = new XNodeEqualityComparer();Xdocument doc = Xdocument.Load("XmlFile1.xml");Dictionary<int, XNode> nodeDictionary = new Dictionary<int, XNode>();foreach (XNode node in doc.Elements("doc").Elements("node")){ int hash = comparer.GetHashCode(node); if (nodeDictionary.ContainsKey(hash)) { // A duplicate has been found. Execute your logic here // ... } else { nodeDictionary.Add(hash, node); }}我的XmlFile1.xml是:
<?xml version="1.0" encoding="utf-8" ?><doc> <node att="A">Blah</node> <node att="A">Blah</node> <node att="B"> <inner>Innertext</inner> </node> <node>Blah</node> <node att="B"> <inner>Different</inner> </node></doc>
nodeDictionary最终将包含节点及其哈希的唯一集合。使用
Dictionary的
ContainsKey方法检测重复项,传入我们使用
XNodeEqualityComparer的
GetHashCode方法生成的节点的哈希值。
我认为这应该足够快以满足您的需求。



