gim、mtg、scn和sfx均为XML格式文件,关键数据、过滤等方法都是一样的,以下为规则举例。
1.读取XML的dom元素
name: gim文件的submesh数量不能大于5
xpath: * /SubMesh.{dom}
condition: ['满足表达式', 'len(d) <= 5'],
rpath: .* gim$,
规则说明:
rpath: . gim$,过滤满足正则的文件,实际执行会在整个检查目录内进行文件过滤:re.match(rpath,文件路径),满足条件的文件会继续执行。
xpath: /SubMesh.{dom} ,提取文件关键数据,XML文件格式如上图所示。SubMesh在第二层级,*/SubMesh 指向
condition: ['满足表达式', 'len(d) <= 5'],对应拿到的data列表,condition所填的内容为列表中内一个单向需要满足的条件。上图中SubMesh的子节点个数为5,满足规则的条件。
2.读取XML属性的值以及二级文件过滤方法
name:gim关联文件检查(读取属性的值)
rpath: . gim$,
xpath: / * / FileName:value
filter:artfunc_check_combine_gimsfx
condition: ['满足表达式', 'len(d) > 0'],
func_str:
规则说明:
rpath: . gim$过滤出gim文件
xpath: / * /FileName:value,读取属性的值,可以使用模糊匹配的方式找到我们关心的属性FileName,FileName:value,获取FileName下value属性的值。但我们拿到的数据是一个文件地址,我们要对拿到的文件地址进行二次解析有两种方法,这里选择的是filter
filter:artfunc_check_combine_gimsfx,通过对filter填写自定义函数,可以对拿到的数据进行二次解析,这里的目的就是判断当前目录下是否存在关联文件,如果不存在则这条规则不通过。
3.XML文件标签的值
name:gim文件取值(tag下的数值)
rpath: .* gim$,
xpath: * /TEST1.name
condition:['满足表达式', 'len(d) > 1'],
规则说明:
rpath . gim$, 过滤gim文件
xpath: /TEST1.name,我们要获取TEST1下面name的值,可以*/TEST1.name,拿到对应的值
condition:['满足表达式', 'len(d) > 1'],,根据拿到的值去自定义规则条件