将两个XML标记融合在一起
xmlfuse的Python项目详细描述
XML保险丝
给定两个具有相同文本的XML文档,将标记融合在一起以创建输出XML文档。在
安装
pip install xmlfuse
建造和测试:
如果您喜欢从源代码构建,请执行以下步骤:
^{pr2}$美国石油学会
importlxml.etreeasetfromxmlfuse.fuseimportfusexml1=et.fromstring('<span>Hello, <i>world!</i></span>')xml2=et.fromstring('<span><b>Hello</b>, world!</span>')xml=fuze(xml1,xml2)assertet.tostring(xml)==b'<span><b>Hello</b>, <i>world!</i></span>'
输入文档必须具有完全相同的文本
如果文本不同,则引发错误。空白很重要!在
示例:
xml1=et.fromstring('<span>Hello</span>')xml2=et.fromstring('<span>Good bye</span>')xml=fuze(xml1,xml2)# expect RuntimeError raised
冲突标记
标记冲突。有时不可能合并两个标记,因为标记相交。在这种情况下,人们可以选择:
a.引发异常并让调用者处理问题 b、 通过分割其中一个标记来解决问题
将<$str^/second。主标记从不分段。如果有
主标记和从标记之间的冲突(如果auto_segment
标志是True
),则fuse()
将分段从属标记以使标记一致。在
示例:
xml1=et.fromstring('<span>Hel<i>lo, world!</i></span>')xml2=et.fromstring('<span><b>Hello</b>, world!</span>')xml=fuze(xml1,xml2)assertet.tostring(xml)==b'<span><b>Hel<i>lo</i></b></i>, <i>world!</i></span>'
将auto_segment
标志设置为False
以防止分段。如果检测到冲突,则将引发错误。在
模棱两可
当主标记和从标记包装相同的文本时,会出现嵌套错误-哪个标记应该是内部的?在
我们通过不断尝试将slave标记放在master中来解决这个问题。这种行为是可以改变的
通过将标志prefer_slave_inner
设置为false。在
示例:
xml1=et.fromstring('<span><i>Hello</i>, world!</span>')xml2=et.fromstring('<span><b>Hello</b>, world!</span>')xml=fuze(xml1,xml2,prefer_slave_inner=True)assertet.tostring(xml)==b'<span><b><i>Hello</i></b>, world!</span>'xml=fuze(xml1,xml2,prefer_slave_inner=False)assertet.tostring(xml)==b'<span><i><b>Hello</b></i>, world!</span>'
从顶级标记被删除
请注意,slave的顶层标记没有合并。只是掉下来了。如果你想合并到输出中,
设置strip_slave_top_tag=False
。在
fuse()签名
fuse(xml1,xml2,*,prefer_slave_inner=True,auto_segment=True,strip_slave_top_tag=True)
其中:
xml1
是主XML文档(LXML元素对象,请参见http://lxml.de)xml2
是从XML文档prefer_slave_inner
控制模糊分辨率auto_segment
允许在标记冲突的情况下进行从属smarkup分段strip_slave_top_tag
允许fuse
忽略从XML的顶层标记
返回融合的XML文档
- 项目
标签: