我尝试比较一些几乎相同的 XML,并发现了这一点:比较 XML 片段?这指出了这一点:https ://bitbucket.org/ianb/formencode/src/tip/formencode/doctest_xml_compare.py#cl-70我有一种测试两个节点的方法。
下一步是从基于节点的测试中获取输出,如果是False
,则进入所有子节点,并重复测试。
我已经写了一个很长的路,它让我可以遍历尽可能多的孩子,我想为以下代码编写代码:
if xml.xml_compare(a.root, b.root) == False:
for i, node in enumerate(a.root):
if xml.xml_compare(a.root[i], b.root[i]) == False:
for j, node in enumerate(a.root[i]):
if xml.xml_compare(a.root[i][j], b.root[i][j]) == False:
for k, node in enumerate(a.root[i][j]):
....
if xml.xml_compare(a.root[i][j][k][l][m][n], b.root[i][j][k][l][m][n]) == False:
这显然不适合任意大小的 XML,而且它不是很优雅。我想我需要编写一个生成器来遍历被测 XML - 我看到 itertool 是这样做的一种方式:
class XML_Tools(object):
....
def iterparent(self, xml_object):
"""
returns the parent and children of a node
"""
for parent in xml_object.getiterator():
for child in parent:
yield self.parent, self.child
main():
a = ET.parse(open(file_a, "r")
b = ET.parse(open(file_b, "r")
xml.iterparent(a.root)
for xml.parent, xml.child in xml.iterparent(a.root):
print xml.parent, xml.child
但是我找不到一种方法来获取我可以运行的工作 xml.parent 或 xml.child 对象。我怀疑我已经搞砸了将函数移动到一个类中,并且没有给出/得到正确的东西。
我想要做的是找到 False 比较的来源,并打印两个有问题的数据元素,并知道它们在两段 XML 中的位置(或缺失)。