基于规则的xml转换
ruledxml的Python项目详细描述
给定一个XML文件。使用规则文件将其转换为另一个XML文件。 规则文件读取一些元素,对其进行处理并返回一个新值 它被写入xml路径。规则受到业务规则引擎的启发 例如Intellect。
安装
使用源包安装:
- python3 setup.py install
- pip3 install -r requirements.txt
从PYPI安装:
- pip3 install ruledxml
运行测试套件:
- 开始python3
- 运行import ruledxml.tests
- 运行ruledxml.tests.runall()
规则
规则的编写只需要很少的技术知识。 然而,并非所有的转换(与xslt类似)都是可能的。 如果元素在源XML中多次出现, 能力有限。
规则是用python编程语言编写的:
@source("/root/body/header") @destination("/html/body/article/h1") def ruleFirstHeader(header): return header + "!"
xpath/root/body/header处的第一个元素是read,它的 文本内容被查找并作为参数传递header 到函数ruleFirstHeader。
如果源元素不存在,则提供空字符串。 请注意,源参数始终是字符串。
该规则返回附加了感叹号的原始标题。 返回值写入目标xpath /html/body/article/h1。所有不存在的元素都将被创建。 如果元素已经存在,则进行第一个匹配。
必需元素
《设计》中的错误来源是当元素不存在时 并提供一个空字符串作为参数。这是一个无声的错误。可以在变量input_required中指定所需的元素 在实际处理开始之前解释:
input_required = [ "/root/body/header" ]
如果在源XML文件中不存在元素^ {tT7}$, 引发valueerror。
非空元素
与必需元素类似,我们有非空元素。提及的路径 在input_nonempty变量中,需要生成非空值。 否则将引发错误并中止处理。
实施
一点点lxml和许多装饰魔法;)