Compare XML snippets?

后端 未结 10 892
名媛妹妹
名媛妹妹 2020-11-30 03:42

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 un

10条回答
  •  自闭症患者
    2020-11-30 04:38

    Here a simple solution, convert XML into dictionaries (with xmltodict) and compare dictionaries together

    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
    

    unit test

    import unittest
    
    class XMLDiffTestCase(unittest.TestCase):
    
        def test_xml_equal(self):
            xml1 = """
            
            """
            xml2 = """
            
            """
            self.assertTrue(XmlDiff(xml1, xml2).equal())
    
        def test_xml_not_equal(self):
            xml1 = """
            
            """
            xml2 = """
            
            """
            self.assertFalse(XmlDiff(xml1, xml2).equal())
    

    or in simple python method :

    import json
    import xmltodict
    
    def xml_equal(a, b):
        """
        Compares two XML documents (as string or etree)
    
        Does not care about element order
        """
        return json.loads(json.dumps((xmltodict.parse(a)))) == json.loads(json.dumps((xmltodict.parse(b))))
    

提交回复
热议问题