输入文档可能非常大(高达60MB,需要比较超过100000个节点),性能是一个问题。有什么有效的方法来检查两个节点是否相等? 示例:
<w:p>
<w:pPr>
<w:spacing w:after="120"/>
</w:pPr>
<w:r>
<w:t>Hello</w:t>
</w:r>
</w:p>
<w:p>
<w:pPr>
<w:spacing w:after="240"/>
</w:pPr>
<w:r>
<w:t>World</w:t>
</w:r>
</w:p>
这个XML片段描述了OpenXML文档中的段落。该算法将用于确定文档是否包含与文档中早期出现的另一个段落(w:pPr节点)具有相同属性(w:p节点)的段落。我想到的一个想法是将节点的外部XML存储在哈希集合中(通常我首先必须获取规范的字符串表示,其中属性和子节点始终以相同的方式排序,但我可以预期我的节点已经处于这种形式)。
另一个想法是为每个节点创建一个XmlNode对象,并编写一个比较器来比较所有属性和子节点。
我的环境是C# (.Net 2.0); 欢迎任何反馈和进一步的想法。也许有人已经有了一个好的解决方案?
编辑:Microsoft的XmlDiff API实际上可以做到这一点,但我想知道是否有更轻量级的方法。 XmlDiff似乎总是产生一个差异图并始终首先生成规范的节点表示,这两件事我都不需要。
编辑2:我最终根据此处提出的建议实现了自己的XmlNodeEqualityComparer。非常感谢!!!
谢谢,divo