将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')
现状
实施
每个xml元素都由其xpath和通过选择相关信息计算的散列来标识。从识别巨大的XML块(已更改/已移动)开始。通过标记、文本前置、文本后置、属性名称和属性值标识父元素。父XML块可以包含更多的父XML块。
<tag attribute-name:"attribute-value" ...>
text-pre
<... children ...>
text-post
</tag>
- 将所有XML元素标记为已更改 >在父块上迭代,从最大子块到父块,其子块数减少。
- 标记当前父级的未更改XML元素
- 标记当前父级的已移动XML元素
- 标记由当前父项的标记名和属性名标识的XML元素
- 标记由当前父级的属性值和元素文本标识的XML元素
- 标记由当前父项的标记名标识的XML元素
- 带有XPath的标记XML元素,不存在于其他XML树中作为当前父< /LI>的添加/删除
- 重复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
- 引入文本块
- 性能提高