XMLTemplater
用FME特性属性值填充XML文档。文档作为模板提供,转换器将使用XQuery将属性值和几何信息插入模板。模板可以从属性、文件中加载,也可以直接输入transformer参数。
输入端口
的每个特性根输入端口,根计算XML模板,并将结果放入result属性参数中。
输出端口
该端口经过变压器处理后输出特性。
参数
分组Sub-Features
方法中的参数相比,按参数分组子功能允许对子功能进行更粗粒度的筛选FME:过程特性函数。将此参数设置为属性名列表时,将FME:过程特性函数将只处理与当前正在处理的特性具有相同属性值的子特性。请注意,此参数对根特性。每一个根特征将被处理并从变压器中输出。
当对子特征进行分组时,如果每个分组中的特征都是连续的,则可以通过将分组的子特征连续参数设为Yes来提高变压器的性能。当设置这个值时,根当所有适用的子特性到达转换器时,将立即处理特性。这意味着transformer将以非阻塞的方式运行,而不是在开始处理模板之前等待所有特性的到来。如果一个组中的特性不是全部连续到达,则转换器的行为是未定义的。如果发生这种情况,一些子功能可能不会被处理。
在XMLTemplater中fme:get属性,fme:获取列表属性和fme:获取xml属性函数特别有用。只允许不改变特性的函数。看到XQuery函数文档有关可用函数的更多信息。
下面的XML模板使用' id '特性属性的值填充XML元素。
还可以使用XQuery函数填充XML属性值。
为了用list属性的内容填充一个XML元素序列,使用循环遍历list项,如下面的示例所示:
{
$road_id in fme:get-list-attribute("road_ids{}")
返回
}
一个常见的用例是,仅在特性属性具有值时才写出XML元素。为此,使用if-then-else语句。下面的示例仅在特性包含时才写出displayName元素显示名称属性,该属性的值不是空字符串。
{如果(fme:has attribute(“display_name”)而不是(fme:get attribute(“display_name”)eq“”),则 {fme:get attribute(“display_name”)} else()}
在评估模板时,它只能访问当前正在处理的特性的属性。为了允许模板访问多个特性的属性,引入了子模板的概念。使用FME:过程特性函数中,转换器可以对一组特性上的子模板进行评估,然后将结果插入到第一个模板中。在transformer接口中,每个子模板都有一个名称。然后将在。中使用此名称FME:过程特性调用以标识要评估的子模板。此外,还将为每个子模板创建transformer输入端口。子模板将根据输入相应转换器输入的特征进行处理。进入这些输入端口之一的特性将被称为子特性。
在下面的例子中,根模板构造一个
{fme:工艺特点(“房子”)}
与HOUSE输入端口关联的模板创建一个
如果有单个特性进入根输入和两个特性进入HOUSE输入,得到的XML文档可能是这样的:
一个模板可以调用许多子模板。例如,在上面的示例中,我们可以添加另一个名为BUSINESS的子模板,然后使用process-features函数从根模板。此外,子模板可以运行另一个子模板,但是子模板不能直接或间接地运行自己。
选择要处理的子特性
通常,输入XMLTemplater的特性具有层次结构。例如,每个村庄将有一些房子,每个房子将有几个房间,等等。如果FME:过程特性函数如前所述,结果文档可能不正确。假设有两个村庄,每个村庄有五所房子。每个村庄和房子都有一个单独的FME特征。村庄的特色被引到根输入端口,而房子的功能被路由到房子的输入端口。
如果使用上面的模板运行转换器,将会有两个输出特性,这是预期的。然而,两者都
的FME:过程特性函数提供了一种实现方法。附加的功能参数可以用来过滤要处理的子功能。第二个参数是属性名列表,第三个参数是属性值列表。只处理其属性与给定的属性名称和值列表相匹配的子特性。
这个函数调用将评估房子子模板的所有功能村庄属性与当前特性的id属性匹配。
fme:工艺特点(fme:“房子”、“village_id”: get-attribute (" id "))
可以指定多个属性/值对。在这种情况下,属性名和属性值必须包含在括号中。下面的函数调用将评估房子子模板的所有功能村庄属性与当前特性的id属性相匹配,且其数层属性是2。
fme:进程特性("HOUSE", ("village_id","num_floors"), (fme:get-attribute("id"), 2))
使用一个函数调用运行多个子模板
可以使用一个函数调用来计算多个子模板。方法传递一个模板名称列表FME:过程特性函数。子模板将根据列表中指定的每个子特性进行评估。这些特征将按照它们进入变压器的顺序进行处理。下面的函数调用处理房子和业务子模板:
fme:工艺特点((“房子”,“业务”))
时仍可使用子特征选择参数FME:过程特性函数用于计算多个子模板。
在相同的特性上运行子模板
可以使用用于评估当前模板的相同特性来评估子模板。的FME:过程模板函数接受应该求值的子模板的名称或名称列表。将对这些模板进行评估,并将结果插入到当前模板中。要计算模板的值,只需将子模板的名称作为函数参数输入即可。例如,在处理房屋特性时,我们可以使用下面的函数调用来评估业主模板。业主模板将使用进入房屋输入端口的功能进行评估。
fme:流程模板(“业主”)
要评估一组模板,请传递一组名称:
fme:流程模板((“业主”、“地址”))
这种技术可以通过将重复的模板结构移动到单个位置来模块化XML模板。例如,如果住宅和企业都有地址,则可以将地址提取到地址模板中,然后住宅和企业模板可以使用FME:过程模板函数插入地址值。这样,地址模板就不必在房子和业务模板中复制了。
几何模板可用于编写自定义XML几何图形。有大量的函数允许提取几何数据,并处理几何图形上的子模板。有关更多信息,请参见XQuery函数文档对于所有的几何函数的列表,以及如何使用子模板写出来的几何数据。
几何子模板以同样的方式作为常规子模板操作,与几何子模板不变压器创建一个输入端口例外。
虽然几何模板被评估时,函数访问功能属性(fme:get属性等),仍可使用。
当指定通过模板Expression参数或模板文件参数XML模板,变压器将验证所有引用的要素属性存在于传入的功能。如果属性是从输入功能缺失(不暴露),变压器将被突出显示红色是不完整的。当这种情况发生时,变压器的总结注释将指示缺少的属性的XML模板引用。
此外,当子模板的名称被传递到FME:过程特性和FME:过程模板功能名称将被验证,以确保它们匹配变压器接口提供的名称。
要覆盖这一额外的验证行为,设置参数验证属性/模板名称为No.
到更新XML文档写的属性。默认值是_结果。
指定更新XML文档是否应该以一个XML头声明开始。默认情况下,输出将包含XML头。当输出是与其它值被连结成一个更大的XML文档省略报头可以是有用的。
自动生成XML模板
在XMLTemplater编辑器窗口中,“生成”按钮可用于打开一个对话框,该对话框可用于生成作为XML模板基础的XML文档。此对话框使用与XMLSampleGenerator变压器。有关如何使用此对话框的更多信息,请参阅XMLSampleGenerator文档。
编辑变压器参数
使用一组菜单选项,可以通过引用工作空间中的其他元素来分配transformer参数。更高级的功能,如高级编辑器和算术编辑器,也可以在一些转换器中使用。要访问这些选项的菜单,请单击在可适用的参数旁边。有关更多信息,请参见变压器参数菜单选项。
变压器的分类
搜索FME知识中心
有关此变压器的示例和信息,请参阅FME知识中心。