Xây dựng trên another SO question, cách có thể kiểm tra xem hai đoạn mã XML được định dạng tốt có bằng ngữ nghĩa hay không. Tất cả những gì tôi cần là "bằng nhau" hay không, vì tôi đang sử dụng nó cho các bài kiểm tra đơn vị.So sánh các đoạn mã XML?
Trong hệ thống tôi muốn, đây sẽ là bằng nhau (lưu ý thứ tự của 'start' và 'kết thúc'):
<?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>
Tôi có lmxl và các công cụ khác theo ý của tôi, và một chức năng đơn giản điều đó chỉ cho phép sắp xếp lại các thuộc tính sẽ hoạt động tốt!
Working Đoạn dựa trên câu trả lời IanB của:
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
'từ formencode.doctest_xml_compare nhập khẩu xml_compare' – laike9m