Building on another SO question, how can one check whether two well-formed XML snippets are semantically equal. All I need is "equal" or not, since I'm using this for unit tests.
In the system I want, these would be equal (note the order of 'start' and 'end'):
<?xml version='1.0' encoding='utf-8' standalone='yes'?> <Stats start="1275955200" end="1276041599"> </Stats> # Reordered start and end <?xml version='1.0' encoding='utf-8' standalone='yes'?> <Stats end="1276041599" start="1275955200" > </Stats>
I have lmxl and other tools at my disposal, and a simple function that only allows reordering of attributes would work fine as well!
Working snippet based on IanB's answer:
from formencode.doctest_xml_compare import xml_compare # have to strip these or fromstring carps xml1 = """ <?xml version='1.0' encoding='utf-8' standalone='yes'?> <Stats start="1275955200" end="1276041599"></Stats>""" xml2 = """ <?xml version='1.0' encoding='utf-8' standalone='yes'?> <Stats end="1276041599" start="1275955200"></Stats>""" xml3 = """ <?xml version='1.0' encoding='utf-8' standalone='yes'?> <Stats start="1275955200"></Stats>""" from lxml import etree tree1 = etree.fromstring(xml1.strip()) tree2 = etree.fromstring(xml2.strip()) tree3 = etree.fromstring(xml3.strip()) import sys reporter = lambda x: sys.stdout.write(x + "\n") assert xml_compare(tree1,tree2,reporter) assert xml_compare(tree1,tree3,reporter) is False
To compare 2 XML files with selenium, we can use the available utilities. For example, XMLUnit can be used for comparison in Java and XMLDiffPatch with C#. If we are using Visual Studio, we need to download XMLDiffPatch NuGet package. Then write the below statements in your program to perform the simple comparison.
You can use formencode.doctest_xml_compare -- the xml_compare function compares two ElementTree or lxml trees.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With