将XML文件与SVG输出进行比较。

diffx的Python项目详细描述


差异

diffx的灵感来自X-Diff

由于版本0.3.2,距离代价的算法被父标识代替。这可能是一个错误的决定,但结果是巨大的XML文档(请参见。测试9)性能和质量得到改善。

这(到目前为止)还不是子弹证据库。它更像是一个与比较树结构和以迷人的方式呈现结果联系的游乐场。

依赖关系

  • Pyside2
  • svgwrite
  • lxml

安装

python pip diffx

第一步

文件示例

from diffx import main

_xml1 = './simple/xml1.xml'
_xml2 = './simple/xml2.xml'

main.compare_xml(_xml1, _xml2)
main.save('./simple/diffx_file.svg')

字符串示例

from diffx import main

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

main.compare_xml(_xml1, _xml2)
main.save('./simple/diffx_string.svg')

现状

diffx example

实施

每个xml元素都由其xpath和通过选择相关信息计算的散列来标识。从识别巨大的XML块(已更改/已移动)开始。通过标记、文本前置、文本后置、属性名称和属性值标识父元素。父XML块可以包含更多的父XML块。

 <tag attribute-name:"attribute-value" ...> 
 text-pre 
 	<... children ...>
 text-post
 </tag>
  1. 将所有XML元素标记为已更改
  2. >在父块上迭代,从最大子块到父块,其子块数减少。
  3. 标记当前父级的未更改XML元素
  4. 标记当前父级的已移动XML元素
  5. 标记由当前父项的标记名和属性名标识的XML元素
  6. 标记由当前父级的属性值和元素文本标识的XML元素
  7. 标记由当前父项的标记名标识的XML元素
  8. 带有XPath的标记XML元素,不存在于其他XML树中作为当前父< /LI>的添加/删除
  9. 重复3。直到所有的xml元素都被识别出来

必须调查所有仍标记为已更改的XML元素

性能

test1: delta_t=0.0699s xml_elements=63
test2: delta_t=0.0104s xml_elements=5
test3: delta_t=0.0154s xml_elements=10
test4: delta_t=0.0240s xml_elements=32
test5: delta_t=0.0258s xml_elements=34
test6: delta_t=0.0290s xml_elements=34
test7: delta_t=0.0124s xml_elements=8
test8: delta_t=0.1027s xml_elements=67
test9: delta_t=4.2290s xml_elements=6144
test11: delta_t=0.0298s xml_elements=34
test12: delta_t=0.0288s xml_elements=45
test13: delta_t=0.0442s xml_elements=75

覆盖范围

Name                                     Stmts   Miss  Cover
------------------------------------------------------------
lib\diffx\__init__.py                       21      4    81%
lib\diffx\base.py                          107      2    98%
lib\diffx\differ.py                        170     19    89%
lib\diffx\hash.py                           71      0   100%
lib\diffx\svg\__init__.py                    0      0   100%
lib\diffx\svg\coloured_text.py              21      0   100%
lib\diffx\svg\coloured_without_text.py      12      5    58%
lib\diffx\svg\compact.py                   340     34    90%
lib\diffx\svg\render_text.py                76      2    97%
lib\diffx\xpath.py                          54      3    94%
------------------------------------------------------------
TOTAL                                      872     69    92%

未决问题

  • 性能分析和改进(不同的哈希算法,…)
  • 如果有一些用户,请改进界面
  • 合并接口的研究

发行说明

1.0.1版

  • readme.md已更新

1.0.0版

  • xmlxdiff移动diffx
  • UI改进的diffx.main添加为入口点
  • 代码重构-pythonic,pep8
  • 引入文本块
  • 性能提高

文档

Tests

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

推荐PyPI第三方库


热门话题
java正在寻找Java8中的内置函数以忽略异常   javascript JQuery更改Div的颜色   java PostgreSQL使用JDBC写入inet列   java为什么体重指数计算结果不正确?   java禁用linux中的log4j控制台日志记录   java我可以让我的JMS主题在新订阅者连接时通知发布者(使用ActiveMQ)   基于三个浮点输入的java过滤器JTable?   Java OpenGL/LWJGL体素纹理   在SpringBoot java应用程序中,有没有一种方法可以通过不同的机器使用hostIP作为主机远程连接到redis服务器   java Struts 2 s:提交按钮语法以在映射中设置值   java源代码:setDomainEnv。windows 7中的cmd文件   缺少货币计算java的返回语句   JavaHibernate没有注意到从其他源进行的数据库更新   无法在OpenCV/Java中生成负矩阵   Java不做循环   java无法使用类对象写入文件ArrayList   jpa使用数组作为调用Java的存储过程的输入   java使用文件提供程序检索内容Uri失败   需要java程序来创建方法模板