【发布时间】:2010-06-09 15:33:25
【问题描述】:
以another SO question 为基础,如何检查两个格式良好的 XML sn-ps 在语义上是否相等。我所需要的只是“相等”与否,因为我将它用于单元测试。
在我想要的系统中,这些是相等的(注意“开始”的顺序 和“结束”):
<?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>
我有 lmxl 和其他工具可供我使用,一个只允许重新排序属性的简单函数也可以正常工作!
根据 IanB 的回答工作 sn-p:
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
【问题讨论】:
-
from formencode.doctest_xml_compare import xml_compare