创建XML文件的差异
xmldiff的Python项目详细描述
xmldiff
xmldiff是一个库和一个命令行实用程序,用于从XML中生成差异。 这看起来好像不需要专门的工具, 但是层次数据中的变化检测与平面数据中的变化检测有很大的不同。 XML类型格式不仅用于计算机可读数据, 它还经常被用作层次数据的格式,这些数据可以呈现为人类可读的格式。 这种格式的传统diff会逐行告诉您不同之处, 但这是人类无法阅读的。 xmldiff提供了在这些情况下使人类可读差异的工具。
完整文档位于xmldiff.readthedocs.io
xmldiff仍在快速发展中, 并且不保证一个版本的输出与任何以前版本的输出相同。
快速使用
xmldiff既是一个命令行工具,也是一个python库。 要从命令行使用它,只需运行xmldiff和两个输入文件:
$ xmldiff file1.xml file2.xml
还有一个命令可以用xmldiff命令的输出修补文件:
$ xmldiff file.diff file1.xml
有一个简单的api用于将xmldiff用作库:
from lxml import etree from xmldiff import main, formatting diff = main.diff_files('file1.xml', 'file2.xml', formatter=formatting.XMLFormatter())
还有一个方法diff_trees()使用两个lxml树, 以及一个方法diff_texts(),它将接受包含xml的字符串。 同样地,还有patch_file()patch_text()和patch_tree():
result = main.diff_file('file.diff', 'file1.xml')
从xmldiff0.6/1.x
更改
A complete, ground up, pure-Python rewrite
Easier to maintain, the code is less complex and more Pythonic, and uses more custom classes instead of just nesting lists and dicts.
Fixes the problems with certain large files and solves the memory leaks.
A nice, easy to use Python API for using it as a library.
Adds support for showing the diffs in different formats, mainly one where differences are marked up in the XML, useful for making human readable diffs.
These formats can show text differences in a semantically meaningful way.
An output format compatible with 0.6/1.x is also available.
2.0 is urrently significantly slower than ^{tt1}$ 0.6/1.x, but this will change in the future. Currently we make no effort to make ^{tt1}$ 2.0 fast, we concentrate on making it correct and usable.
贡献者
- Lennart Regebro, lregebro@shoobx.com (main author)
- Stephan Richter, srichter@shoobx.com
diff算法基于“Change Detection in Hierarchically Structured Information”, 文本diff使用的是google的diff_match_patch算法。
更改
2.3(2019-02-27)
- 添加了一个简单的xmlpatch命令和api。
- 文档和代码样式的多次更新
2.2(2018-10-12)
- 处理顶级注释和XML格式化程序的解决方法
2.1(2018-10-03)
- 将替换Unicode字符区域更改为使用专用区域 在bmp(0)中,支持狭窄的python构建
- 添加了–唯一属性参数。
2.1b1(2018-10-01)
- 为更快的节点比较添加了选项。“中间”选项现在是 默认情况下,它在匹配项中的更改很少,但速度要快得多。
- 实现了一个快速匹配算法,以更快的扩散。
- 通过缓存提高速度
- 修正了movenode操作有时顺序错误的错误
- 添加了insertcomment操作,因为注释需要不同的处理方式, 所以用这种方法来对付他们比较容易。您仍然可以使用deletenode和 无需特殊处理即可为其更新文本。
- 重命名标记时,xmlformatter将用“diff:rename”标记它们。 而不是做一个新的标签和删除旧的。
- 标记现在将首先移动,并在以后更新和重命名为新的 标记名或属性在旧位置可能无效。
2.0(2018-09-25)
- 一个完整的、自下而上的、纯python重写
- 新的简易API
- 100%测试覆盖率
- 新输出格式:
- 带有新操作的新默认输出格式
- 任何解析旧格式的人都可以解析的格式。
- 通过标记和属性标记更改的XML
- xmldiff 2.0明显慢于xmldiff 0.6或1.0, 到目前为止,重点是正确性,而不是速度。