0

我正在寻找一个基于 python 的解决方案来比较两个忽略特定属性值的 xml。例如,下面的 xml 应该被视为相同,尽管RefID值不同,因为这些在每个 xml 中都是不同的。解决方案之一可能是先用空字符串替换它们,然后比较 xml。python中是否有任何可用的库可以在比较xmls时做到这一点。

#XML1:

<Objects>
   <Object Name="Object1" Ref="12345">
        <Item Name="Item1" value="Value1"/>
    </Object>
</Objects>

<RefTable>
    <Refitem ID="12345" Name="Item1"/>
</RefTable>


#XML2:

<Objects>
   <Object Name="Object1" Ref="54321">
        <Item Name="Item1" value="Value1"/>
    </Object>
</Objects>

<RefTable>
    <Refitem ID="54321" Name="Item1"/>
</RefTable>
4

1 回答 1

1

像这样的东西可以工作:

root1 = etree.fromstring(xml1)
root2 = etree.fromstring(xml2)
for node1, node2 in zip(root1.iter(), root2.iter()):

   if node1.tag == node2.tag:
       a1 = node2.attrib
       a2 = node2.attrib

       if node1.tail != node2.tail:
           raise ValueError('XML differs')

       for ignored in ('ID',):

           try:
              del a1[ignored]
           except AttributeError:
              pass

           try:
              del a2[ignored]
           except AttributeError:
              pass

        if a1 != a2:
           raise ValueError('XML differs')
    else:
        raise ValueError('XML differs')

您可能需要使用 itertools.izip_longest() 而不是 izip()

于 2013-09-09T04:42:39.553 回答