Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Compare XML snippets?

Tags:

python

diff

xml

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 
like image 471
Gregg Lind Avatar asked Jun 09 '10 15:06

Gregg Lind


People also ask

How do I compare two XML files in selenium?

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.


1 Answers

You can use formencode.doctest_xml_compare -- the xml_compare function compares two ElementTree or lxml trees.

like image 71
Ian Bicking Avatar answered Sep 20 '22 12:09

Ian Bicking