使用python比较xml文件

2024-10-06 12:10:43 发布

您现在位置:Python中文网/ 问答频道 /正文

我想比较这两个xml文件:

文件1.xml:

<ngs_sample id="40332">
  <workflow value="salmonella" version="101_provisional" />
  <results>
  <gastro_prelim_st reason="not novel" success="false">
      <type st="1364" />
      <type st="9999" />
  </gastro_prelim_st>
 </results>
</ngs_sample>

文件2.xml:

^{pr2}$

我用xmldiff来比较a.xml和b.xml:

def compare_xmls(observed,expected):

    from xmldiff import main, formatting
    formatter = formatting.DiffFormatter()
    diff = main.diff_files(observed,expected,formatter=formatter)
    return diff

out = compare_xmls(a.xml, b.xml)
print(out)

输出:

[delete, /ngs_sample/results/gastro_prelim_st/type[2]]

任何人都知道如何识别这两个xml文件之间的区别,也就是说,与b.xml文件相比,删除了哪些内容。有人推荐用python比较xml文件的其他方法吗?在


Tags: 文件sampleformattertypengsdiffxmlresults
3条回答

使用xmldiff来执行这个确切的任务。在

在主.py在

from xmldiff import main
diff = main.diff_files("file1.xml", "file2.xml")
print(diff)

输出

^{pr2}$

您可以切换到XMLFormatter并手动筛选出结果:

...
# Change formatter:
formatter = formatting.XMLFormatter(normalize=formatting.WS_BOTH)

...

# after `out` has been retrieved:
import re
for i in out.splitlines():
  if re.search(r'\bdiff:\w+', i):
    print(i)

# Result:
#       <type st="9999" diff:delete=""/>

尝试XmlXdiff,目前只有svg输出可用。但是提供文本输出或接口类应该非常简单。在

XmlXDiff网站上的一些示例代码:

from XmlXdiff.XReport import DrawXmlDiff

_xml1 = """<root><deleted>with content</deleted><unchanged/><changed name="test1" /></root>"""
_xml2 = """<root><unchanged/><changed name="test2" /><added/></root>"""

with open("test1.xml", "w") as f:
    f.write(_xml1)

with open("test2.xml", "w") as f:
    f.write(_xml2)

x = DrawXmlDiff("test1.xml", "test2.xml")
x.saveSvg('xdiff.svg')

Example Output

相关问题 更多 >