Skip to content

Nexo规则字段说明

Nexo检查端的规则字段可以分为三块内容,文件类型判断,关键数据获取,数据需要满足的条件,使用到的字段如下:

字段 中文名 数据类型 说明 举例
name 名称 str 规则名称
xpath 路径 str 资源文件内部关键数据获取路径,取出来的内容存到的一个list内 数据为data={‘a’:{‘b’:1,’c’:2},‘d’:{‘b’:3,’c’:4}},如果我们要取出key为b的值,那么xpath=’data/a/b’或者xpath=’*/a/b’,那么取出来的数据data将为[1,3]
filter 过滤器 str 对xpath取出来的数据进行转换或者过滤,支持正则或自定义函数 当filter类型是个str的时候,将会使用re.match(filter,d),d时取出来的单个数据,如数据为[“abcd-1223”, “0000-1223”],可以使用filter=’0000-.*’来进行过滤,那么只会检查[“abcd-1223”]
not_filter 反向过滤器 str 资源文件反向过滤器
confition 满足条件 list 关键数据满足条件,关键数据data会被遍历执行,每一条数据作为变量d,内置包含存在,存在于,不存在,不存在于,满足表达式,多文件关联,存在于检查目录 见补充说明
only_name 只取文件名 bool 使用文件名作为关键数据
rpath 正则路径名 str 正则路径名,匹配满足正则的资源文件,用re.match(rpath,文件路径)来进行正则匹配
not_rpath 过滤正则路径 str 反向正则路径名,匹配不成功,则该文件使用该规则进行检查,与rpath作用相反
subxpath 二级文件中的关键字路径 str 二级文件中的关键字路径,跨文件时使用,当xpath取出来的数据为一个文件名的时候,如果我们需要这些文件的内容进行检查,那么我们可以使用subxpath进行再次取值,格式和xpath保持一致
subfilter 二级过滤器 str 二级过滤器,同过滤器
ignor 是否加入检查 str 是否加入检查
desc 描述 str 描述
func_str 附加函数 str 附加函数,filter过滤器的自定义函数 见补充说明

补充说明

1. condition举例: condition支持的类型包括 存在,存在于,不存在,不存在于,满足表达式和存在于检查目录 参考写法: [‘存在’] [‘不存在] ["存在于","../../../../Char/ "] ,表示存在于某个路径下。 ["满足表达式","d == 'PBR_Foliage'"] #d是xpath对取出来的数据data中的遍历的单值,for d in data,例如xpath取出来了['PBR_Foliage', 'PBR_Foliage2'],那么d就依次是PBR_Foliage与PBR_Foliage2。 2. filter的fun_str过滤数据举例:* 过滤掉0000开头的数据,函数写法

def filter_zero(**pdata):
    ret = []
    data = pdata.get(“data”,[])
    for d in data:
        if d.startswith(“0000-“):
            continue
        ret.append(d)
    return ret

规则编写举例

Nexo检查的文件类型格式主要有2种,xml格式和二进制格式。其中,二进制资源文件,包括mesh,gis,png,dds,bmp,tga,jpg文件等;XML类资源文件,包括scn,gim,sfx,mtg文件。二进制文件的规则较为特殊,每个文件类型都有一套定义。XML文件比较通用,通过XML解析可以得到具体关键数据。

1.png

如图所示为一个gim文件,作为基本规则举例 例子1,gim文件的submesh数量不能大于5。(读取dom元素) 第一步,需要过滤出gim文件,因此rpath需要填写一个正则表达式.*gam$,过滤出满足后缀的文件。

第二步,需要找到gim文件中SubMesh的属性,gim文件是按照XML格式生成的,所以我们需要找到所有的SubMesh属性*/SubMesh.{dom},可以看上图中有1个SubMesh,每个SubMesh下还有5个子属性

第三步,判断找到的关键数据是否满足条件,对于上面取出来的属性,会放到一个data=[]里面,那规则里面定义不能大于5,需要满足每一个SubMesh数据,规则会依次遍历data的数据,每一条数据变量为d,因此,我们定义的规则只需要 ["满足表达式", "len(d) <= 5"]

例子2,gim关联文件检查(读取属性的值) 第一步,仍然是过滤出gim文件,因此rpath需要填写一个正则表达式.*gam$

第二步,读取属性的值,可以使用模糊匹配的方式找到我们关心的属性FileName,* / * / FileName:value,获取FileName下value属性的值。

第三步,拿到value的值为一个路径地址,可以根据自身需求使用自定义filter对数据进行改造,或者使用subxpath进行二级过滤。

例子3,gim文件取值(tag下的数值)

第一步,过滤gim文件,因此rpath需要填写一个正则表达式.*gam$

第二步,我们要获取TEST1下面name的值,可以*/TEST1.name,拿到对应的值data=[aaaaa]

第三步,根据拿到的值去自定义规则条件