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:过程特性调用以标识要评估的子模板。此外,将为每个子模板创建一个转换器输入端口。子模板将在输入相应变压器输入的特征上进行处理。输入其中一个输入端口的特征称为子特征。
在下面的示例中根模板构造
{fme:process features(“house”)}
与HOUSE输入端口关联的模板创建
如果单个要素进入根输入和两个特性输入house输入,生成的xml文档可能如下所示:
一个模板可以调用许多子模板。例如,在上面的示例中,我们可以添加另一个名为business的子模板,然后使用process features函数从根模板。此外,子模板可以运行另一个子模板,但子模板不能直接或间接运行自身。
选择要处理的子要素
通常,进入xmltemplater的特性有一个层次结构。例如,每个村庄都有一些房子,每个房子都有几个房间等。如果FME:过程特性函数的使用如上所述,生成的文档可能不正确。假设有两个村庄,每个村庄有五间房子。每个村庄和房屋都有一个单独的FME特征。乡村特色被引入根输入端口,而房屋特征被路由到房屋输入端口。
如果使用上述模板运行transformer,则会有两个输出特性,如预期的那样。然而
这个FME:过程特性函数提供了这样做的方法。附加功能参数可用于过滤要处理的子特征。第二个参数是属性名列表,第三个参数是属性值列表。只处理其属性与给定属性名称和值列表匹配的子功能。
此函数调用将评估所有房屋功能的房屋子模板村庄属性与当前功能的id属性匹配。
fme:流程特征(“house”,“village_id”,fme:get attribute(“id”))
可以指定多个属性/值对。在这种情况下,属性名和属性值必须包含在括号中。下面的函数调用将对其村庄属性与当前要素的id属性匹配,并且数层属性为2。
fme:流程特征(“house”,“village_id”,“num_floors”),(fme:get attribute(“id”),2))
使用单个函数调用运行多个子模板
可以使用单个函数调用计算多个子模板。只需将模板名称列表传递给FME:过程特性函数。子模板将根据列表中命名的每个子功能进行计算。这些特征将按照它们进入变压器的顺序进行处理。以下函数调用处理内部和业务子模板:
fme:流程特征((“house”,“business”))
当FME:过程特性函数用于计算多个子模板。
在同一功能上运行子模板
可以使用用于评估当前模板的相同功能评估子模板。这个FME:过程模板函数接受应求值的子模板的名称或名称列表。将对这些模板进行评估,并将结果插入到当前模板中。要计算模板,只需输入子模板的名称作为函数参数。例如,在处理房屋特征时,我们可以使用以下函数调用评估所有者模板。业主模板将使用进入房屋输入端口的功能进行评估。
fme:过程模板(“业主”)
要计算一组模板,请传递名称列表:
FME:流程模板((“所有者”,“地址”))
这种技术可以通过将重复的模板结构移动到一个地方来模块化xml模板。例如,如果房屋和企业都有地址,则可以将地址提取到地址模板中,然后房屋和企业模板可以使用FME:过程模板函数插入地址值。这样,地址模板就不必在内部和业务模板中重复。
几何图形模板可用于写出自定义XML几何图形。有大量的函数可以提取几何数据,并处理几何上的子模板。有关详细信息,请参见xquery函数文档获取所有几何函数的列表,以及如何使用子模板写出几何数据。
几何子模板的操作方式与常规子模板相同,只是几何子模板没有在transformer上创建输入端口。
在评估几何图形模板时,访问特征属性的函数(fme:get属性等),仍然可用。
当通过模板表达式参数或模板文件参数指定XML模板时,转换器将验证所有引用的特性属性都存在于传入的特性中。如果输入特性中缺少(未公开)属性,则转换器将以红色高亮显示为不完整。当出现这种情况时,transformer的Summary注释将指出XML模板所引用的属性缺失。
此外,当子模板名称被传递到FME:过程特性和FME:过程模板将验证这些名称,以确保它们与transformer接口中给出的名称匹配。
若要覆盖此附加验证行为,请设置参数验证属性/模板名称没有。
写入更新后的XML文档的属性。默认值是_结果。
指定更新后的XML文档是否应该以XML头声明开始。默认情况下,输出将包含一个XML标头。当输出与其他值连接成更大的XML文档时,省略标头可能很有用。
自动生成XML模板
在XMLTemplater编辑器窗口中,“生成”按钮可用于打开一个对话框,该对话框可用于生成作为XML模板基础的XML文档。此对话框使用与XMLSampleGenerator变压器。有关如何使用此对话框的更多信息,请参阅XMLSampleGenerator文档。
编辑变压器参数
使用一组菜单选项,可以通过引用工作空间中的其他元素来分配transformer参数。更高级的功能,如高级编辑器和算术编辑器,也可以在一些转换器中使用。要访问这些选项的菜单,请单击在可适用的参数旁边。有关更多信息,请参见变压器参数菜单选项。
变压器的分类
搜索FME知识中心
有关此变压器的示例和信息,请参阅FME知识中心。