我有两个使用该System.Xml.XmlDocument.LoadXml(fileName)方法读取的 XML 文件(文件 A 和文件 B,其中文件 A 是文件 B 的子集)。
然后,我使用System.Xml.XmlNode.SelectNodes(nodeName)我需要比较文件 A 中的每个选定 xml 节点是否相等或文件 B 中同一节点的子集来选择这些文件中的节点。还需要检查任何节点中包含的子节点的顺序文件 A 中的子节点的顺序与文件 B 中该节点中包含的相同子节点的顺序相同。
例如,
文件A
<rootNodeA>
<elementA>
<subelementA>content</subElementA>
<subelementB>content</subElementB>
<subelementB>content</subElementC>
<subelementB>content</subElementD>
</elementA>
<elementB>
<subelementA>content</subElementA>
<subelementB>content</subElementB>
</elementB>
</rootNodeA>
文件B
<rootNodeB>
<elementA>
<subelementB>content</subElementB>
<subelementD>content</subElementD>
</elementA>
<elementB>
<subelementA>content</subElementA>
</elementB>
</rootNodeB>
如您所见,fileB 是 fileA 的子集。我需要检查elementA文件 B 的节点是否相等或文件 A 中同一节点的子集。对于子节点(等)和节点/子节点的内容也elementA应该如此。subElementA
此外,如果您elementA在 fileA 中看到,则按 A、B、C、D 的顺序有 4 个子元素。对于elementAfileB 中的相同内容,按 A、D 的顺序有 2 个子元素。该顺序即A在D之前与文件A中的顺序相同,也需要检查这一点。
我的想法是计算节点的哈希值,然后比较它们,但不确定如何或是否能满足目的。
编辑:我到目前为止的代码,
HashSet<XmlElement> hashA = new HashSet<XmlElement>();
HashSet<XmlElement> hashB = new HashSet<XmlElement>();
foreach (XmlElement node in nodeList)
{
hashA.Add(node);
}
foreach(XmlElement node in masterNodeList)
{
hashB.Add(node);
}
isSubset = new HashSet<XmlElement>(hashA).IsSubsetOf(hashB);
return isSubset;
炎炎设计
相关分类