span8
span4
寻找下面处理示例的灵感。显然可以通过一些条件值来实现,但是如果有更多的组合(额外的属性对)该怎么办呢?
一个特性有三个属性(WDA、WDB、WDC),其中一个是Y/N值
三个匹配属性(MY_A、MY_B、MY_C),包含数值1到5
通过(总是因为只有一个单词是Y,所以没有可比性)
WDA=Y WDB=N WDC=N
WDA=Y WDB=Y WDC=N
我的A=2我的B=5我的C=2
#我在一个下雨的星期六玩FME:-)
此工作流将亚搏在线属性值填充到结构化列表(_list{})中。flag, _list{}.value), filters the elements having flag = Y, removes duplicate elements having the same value, then filters features by testing if _list{1}.value is missing.ListElementFilter是来自Hub的自定义转换器。
关键是如何创建只包含对应Y标志的值的列表,我认为这里可以有效地使用XQuery。
例如,使用此模板表达式的XMLTemplater创建一个XML文档
{让$attr1:=(“WDA”,“WDB”,“WDC”)让$attr2:=(“MY_A”,“MY_B”,“MY_C”)在$attr1的$p处为$A,其中fme:get attribute($A)eq“Y”return {fme:get属性($attr2[$p])} }
还可以在JSONTemplater中使用XQuery表达式生成JSON数组。如。
[让$attr1:=(“WDA”,“WDB”,“WDC”)让$attr2:=(“MY_A”,“MY_B”,“MY_C”),在$attr1中$p处$A,其中fme:get attribute($A)eq“Y”返回fme:get attribute($attr2[$p])]
您可以使用jsonflatter将结果JSON数组展平,以创建一个名为“array{}”的列表。
巨蟒当然会耍花招。
#PythonCaller脚本示例def processFeature(feature):attr1=[“WDA”,“WDB”,“WDC”]attr2=[“MY_A”,“MY_ab”,“MY_ac”]values=set([])用于zip中的a1,a2(attr1,attr2):if feature.getAttribute(a1)=“Y”:values.add(feature.getAttribute(a2))feature.setAttribute(“u result”,“passed”if len(values)<2 else“failed”)
无论如何,我都忍不住要添加一个Tcl版本。一个TclCaller脚本示例:
proc检查{}{设置attr1[列表“WDA”“WDB”“WDC”]设置attr2[列表“MY_A”“MY_B”“MY_C”]设置值{}foreach a1 attr1 a2 attr2美元{如果{[美元FME_GetAttribute a1] = = " Y "} {lappend值[FME_GetAttribute a2美元]}}设置值(lsort美元值)如果{[lindex美元值0]= = [lindex美元值结束]}{返回“传递”}其他{返回“失败”}}
@值(WDA)@Value(MY A),@Value(WDB)@Value(MY B),@Value(WDC)@Value(MY C)
N\d+|年
新属性 | 属性值 |
_康卡 | @ReplaceRegEx(@Value(WDA)@Value(MY A)@Value(WDB)@Value(MY B)@Value(WDC)@Value(MY C),N\d | Y,“”) |
_康卡 | @ReplaceString(@CurrentAttribute(),@Left(@CurrentAttribute(),1),“”) |
我的方法(附带的工作空间)将属性分解为各个特性,并为Y记录查找重复值的数量。如果超过一个,那就是失败。它应该适用于任意数量的属性。
©2019安全亚搏在线软件公司法律