Skip to content

Instantly share code, notes, and snippets.

@guillaumevincent
Last active August 29, 2015 14:21
Show Gist options
  • Save guillaumevincent/dbd7141bc95b14d22947 to your computer and use it in GitHub Desktop.
Save guillaumevincent/dbd7141bc95b14d22947 to your computer and use it in GitHub Desktop.
xml diff in python with xmltodict
import unittest
from xmldiff import XmlDiff
class XMLDiffTestCase(unittest.TestCase):
def test_xml_equal(self):
xml1 = """<a></a>"""
xml2 = """<a></a>"""
self.assertTrue(XmlDiff(xml1, xml2).equal())
def test_xml_are_not_equal(self):
xml1 = "<a></a>"
xml2 = "<b></b>"
self.assertFalse(XmlDiff(xml1, xml2).equal())
def test_parameter_order_doesnt_matter(self):
xml1 = """<a p1="1" p2="2"></a>"""
xml2 = """<a p2="2" p1="1"></a>"""
self.assertTrue(XmlDiff(xml1, xml2).equal())
def test_newline_doesnt_matter(self):
xml1 = """<a></a>"""
xml2 = """<a>
</a>"""
self.assertTrue(XmlDiff(xml1, xml2).equal())
def test_nested_tag(self):
xml1 = """<a><b></b></a>"""
xml2 = """
<a>
<b></b>
</a>"""
self.assertTrue(XmlDiff(xml1, xml2).equal())
def test_nested_tag_not_equal(self):
xml1 = """<a><b></b><c><d></d></c><e></e></a>"""
xml2 = """
<a>
<b></b>
</a>
"""
self.assertFalse(XmlDiff(xml1, xml2).equal())
def test_nested_tag_parameter_not_equal(self):
xml1 = """<t t="r" v="1"><f><p k="a" v="2"/></f></t>"""
xml2 = """
<t t="r" v="1">
<f>
<p k="a" v="1"/>
</f>
</t>"""
self.assertFalse(XmlDiff(xml1, xml2).equal())
def test_double_tag_equal(self):
xml1 = """<t t="r" v="1"><f><p k="a" v="1"/><p k="b" v="2"/></f></t>"""
xml2 = """
<t t="r" v="1">
<f>
<p k="a" v="1"/>
<p k="b" v="2"/>
</f>
</t>"""
self.assertTrue(XmlDiff(xml1, xml2).equal())
def test_xml_equal_with_encoding(self):
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>"""
self.assertTrue(XmlDiff(xml1, xml2).equal())
import json
import xmltodict
class XmlDiff(object):
def __init__(self, xml1, xml2):
self.dict1 = json.loads(json.dumps((xmltodict.parse(xml1))))
self.dict2 = json.loads(json.dumps((xmltodict.parse(xml2))))
def equal(self):
return self.dict1 == self.dict2
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment