7 /// Summary description for XmlCompare.
\r
9 public class XmlCompare
\r
14 IgnoreAttribOrder=1,
\r
17 public XmlCompare (Flags flags)
\r
22 public XmlCompare ()
\r
23 :this (Flags.IgnoreNone)
\r
27 public bool AreEqualAttribs (XmlAttributeCollection attrs1, XmlAttributeCollection attrs2)
\r
29 if (attrs1.Count != attrs2.Count)
\r
31 for (int i=0; i<attrs1.Count; i++) {
\r
32 if ((flags & Flags.IgnoreAttribOrder) != 0) {
\r
33 string ln = attrs1[i].LocalName;
\r
34 string ns = attrs1[i].NamespaceURI;
\r
35 string val = attrs1[i].Value;
\r
36 XmlAttribute atr2 = attrs2[ln, ns];
\r
37 if (atr2 == null || atr2.Value != val)
\r
40 if (attrs1 [i].LocalName != attrs2 [i].LocalName)
\r
42 if (attrs1 [i].NamespaceURI != attrs2 [i].NamespaceURI)
\r
44 if (attrs1 [i].Value != attrs2 [i].Value)
\r
51 public bool AreEqualNodeList (XmlNodeList lst1, XmlNodeList lst2)
\r
53 if (lst1.Count != lst2.Count)
\r
55 for (int i=0; i<lst1.Count; i++) {
\r
56 if (!AreEqual (lst1[i], lst2[i]))
\r
62 public bool AreEqual (XmlNode node1, XmlNode node2)
\r
64 if (node1.NodeType != node2.NodeType)
\r
66 if (node1.LocalName != node2.LocalName)
\r
68 if (node1.NamespaceURI != node2.NamespaceURI)
\r
70 if (node1.Attributes != null && node2.Attributes != null) {
\r
71 if (!AreEqualAttribs (node1.Attributes, node2.Attributes))
\r
74 else //one of nodes has no attrs
\r
75 if (node1.Attributes != null || node2.Attributes != null)
\r
76 return false;//and another has some
\r
77 if (!node1.HasChildNodes && !node2.HasChildNodes)
\r
78 return node1.Value == node2.Value;
\r
79 else {//one of nodes has some children
\r
80 if (!node1.HasChildNodes || !node2.HasChildNodes)
\r
81 return false;//and another has none
\r
82 return AreEqualNodeList (node1.ChildNodes, node2.ChildNodes);
\r
88 XmlDocument doc1 = new XmlDocument ();
\r
89 XmlDocument doc2 = new XmlDocument ();
\r
90 XmlDocument doc3 = new XmlDocument ();
\r
91 XmlDocument doc4 = new XmlDocument ();
\r
93 doc1.LoadXml (@"<?xml version=""1.0""?>
\r
95 <element attr1=""1"" attr2=""2"" />
\r
97 doc2.LoadXml (@"<?xml version=""1.0""?><doc><element attr1=""1"" attr2=""2""/></doc>");
\r
98 doc3.LoadXml (@"<?xml version=""1.0""?><doc><element attr2=""2"" attr1=""1""/></doc>");
\r
99 doc4.LoadXml (@"<?xml version=""1.0""?><doc><element attr3=""3"" attr2=""2""/></doc>");
\r
101 XmlCompare cmp1 = new XmlCompare();
\r
102 XmlCompare cmp2 = new XmlCompare(Flags.IgnoreAttribOrder);
\r
104 Console.Out.WriteLine (cmp1.AreEqual (doc1, doc2).ToString ());
\r
105 Console.Out.WriteLine (cmp1.AreEqual (doc1, doc3).ToString ());
\r
106 Console.Out.WriteLine (cmp2.AreEqual (doc1, doc3).ToString ());
\r
107 Console.Out.WriteLine (cmp2.AreEqual (doc1, doc4).ToString ());
\r