创建XML文件的差异

xmldiff的Python项目详细描述


xmldiff

https://travis-ci.org/Shoobx/xmldiff.svg?branch=masterhttps://coveralls.io/repos/github/Shoobx/xmldiff/badge.svg

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.

贡献者

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, 到目前为止,重点是正确性,而不是速度。

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
java正确使用setCellValueFactory   java当使用flavor维度时,设置Android applicationId的正确方法是什么?   java为了在测试用例中并发执行某些步骤,可以克隆WebDriver实例   JAVA中的If语句给出错误   java在kindle上使用JavaFX   java如何在屏幕上显示多个视图时提高性能?   java“重命名”文件项   使用kafka运行Spark流媒体示例时出现java NoSuchMethodError   java如何在查询视图时返回实体列表   java在条件表达式中使用equals方法   java实现了一种回调机制,用于通知插入/更新   java我想用动态的方式把这个json做成表格式,我怎样才能用安卓来制作呢?   java在另一个字符串的特定点输入字符串时遇到问题   java如何在SeleniumWebDriver中选择xpath中具有动态值的对象   JavaJooq生成一个静态方法来调用函数,但没有方法将其作为字段   scala文件名包含斜杠标点符号,并在线程“main”java中给出异常。木卫一。FileNotFoundException:foo/boo/en_en。json(没有这样的文件或目录)   java使用Saxon和XSLT转换JDOM XML文档   使用Java数组   java从smb文件夹读取文件   java在where in子句中没有值时如何执行查询