span8
span4
XML是一种结构化文本,通常用于开放标准和交换格式。它在web和消息传递应用程序中也经常遇到。能够将数据转换为XML是FME的一个重要功能。本文介绍了FME编写XML的方法,并提供了一个基本示例来帮助您入门。它假设您对基本的FME和XML概念有一定的了解。例如,XML中的术语“元素”可以与FME术语中的特性或属性相关,这取决于如何解释XML文档。看到FME处理XML更多的背景。
FME使用模板方法来编写XML。XML文档结构由XMLTemplater转换器放置或引用。然后,fme:get-attribute函数被放置在模板中您希望将特性属性值合并到文档中的位置。这与邮件合并操作非常相似,其中信件模板从每个记录接收名称和地址值,以动态生成定制的消息。
可以为每个特性生成一个XML文档,比如数据集元数据。或者,根和子模板可以用于为一个文档建模,该文档具有一个根和基于多记录数据集的多个子元素。XML文档结构可以使用XMLSampleGenerator从XSD生成,也可以从示例XML输出文档获得。然后使用FME:get-attribute函数将元素值替换为FME字段值,我们希望内容由源数据驱动。XMLTemplater生成的XML存储在单个_result属性中,然后可以使用XMLValidator和XMLFormatter转换器对该属性进行验证和格式化。在本练习中,我们使用sample XML来播种模板,并将验证和格式化留给以后的练习。
通常使用文本文件写入器将最终输出写入磁盘,因为XML result属性只是一个大的文本字段。XML写入器并不常用,因为它还不支持从XSD读取模式。在某些特殊情况下,XML编写器是有益的,比如使用片段模式来编写非常大的XML数据集。这种高级方法允许在接收到XML片段时写入,而不是像文本文件写入器那样在写入之前构建整个文档的缓冲区。
下面的练习演示如何将单个记录馈送到XMLTemplater模板中,并生成与Safe_Building_Demo.XML中找到的结构匹配的基本XML文档。亚搏在线
一。打开FME工作台。
从一个空白的工作区开始。拖放附加的源CSV文件:Building.scv。
2。添加XMLTemplater。
将其转换为XML的第一步是生成根元素。为了创建XML模板,我们从要生成的XML文件类型的示例的根对象复制内容—在本例中,是Safe_Building_Demo.XML的根。亚搏在线
添加XMLTemplater,将CSV源构建功能类型连接到它,编辑XMLTemplater并将以下内容放在根模板中:
街道地址 城市 公元前 加拿大 0 0
三。在XMLTemplater之后连接一个日志程序并运行工作区。
请注意,模板只会写入结果字段中的输出。
我们真正想要的是在编写XML之前将输入CSV记录中的值合并到模板中。为此,我们只需打开XMLTemplater,编辑根目录,单击要合并值的每个元素的内容,然后单击要合并值的属性。这应该将与我们选择的属性({fme:get attribute(“Building_id”)}等)关联的属性函数插入到我们放置光标的模板位置。
对所有可用属性执行此操作后,应具有如下所示的根模板:
{fme: get-attribute(“地址”)} {fme: get-attribute(“城市”)} {fme: get-attribute(“省”)} {fme: get-attribute(“中国”)} {fme: get-attribute(经度)} {fme: get-attribute(“纬度”)}
4.最后,要将此写入磁盘,从写入器菜单中添加一个文本文件写入器。
将目标文件路径设置为building_output.xml,然后将输出MIME类型设置为text/xml。这对于在某些查看器(如web浏览器)中正确显示xml非常重要。为了给文本文件写入程序提供数据,将XMLTemplater的“Result attribute”设置为“text_line_data”。
5个。运行工作区并检查生成的building_output.xml输出。查看如何将这些值合并到XML文档结构中。您应该看到以下输出。注意fme:get attribute(“”)函数是如何被feature attribute值替换的:
7445年第132位。 萨里 公元前 加拿大 -122.860 49.138
下面的练习演示如何从1.a获取工作区,并使用XMLTemplater子模板基于输入记录添加多个子元素。
回到最初的任务,我们希望使用FME生成与Safe_Building_Demo.XML中找到的结构匹配的XML内容。亚搏在线我们在示例1a中生成了根内容,因此下一步是生成Room元素。
一。首先,向read room . CSV添加一个新的CSV阅读器。
2。接下来,编辑XMLTemplater。
选中子模板并单击“+”以添加新的子模板。
图1所示。带有子模板的XMLTemplater配置
与之前一样,我们使用要生成的对象的单个示例实例或元素启动模板。在本例中,我们需要一个Room元素的示例,可以从Safe_Building_Demo.xml中的第一个房间获得:亚搏在线
接待 管理 12
然后单击OK将更改保存到XMLTemplater。您将注意到XMLTemplater上有一个名为“SUB”的新输入端口。我们需要将文件室输入特性连接到此,以便在特性模式上为XMLTemplater提供所需的字段。
现在连接了房间功能类型,我们可以用从输入CSV文件中读取的值替换这些值。这将生成如下所示的子模板:
{fme: get-attribute(“名字”)} {fme: get-attribute(“类别”)} {fme: get-attribute(“区域”)}
要完成XMLTemplater配置,我们需要告诉根模板调用子模板。这是使用fme:process features(“SUB”)函数完成的。将其添加到根模板中,以便在建筑父对象的末尾插入房间子元素。
{fme: get-attribute(“地址”)} {fme: get-attribute(“城市”)} {fme: get-attribute(“省”)} {fme: get-attribute(“中国”)} {fme:工艺特点(“子”)} {fme: get-attribute(经度)} {fme: get-attribute(“纬度”)}
三。在XMLTemplater之后添加XMLFormatter。
最后,在写入磁盘之前格式化xml是一个好主意。这使得查看我们的输出和解决任何问题变得容易得多,而且由于只有有效的XML可以格式化,因此还有捕获语法错误的额外好处。稍后我们将更详细地讨论验证。
在XMLTemplater之后添加XMLFormatter。将“带XML文本的属性”和“包含XML输出的属性”设置为:“文本行数据”。剩下的设置保留默认值(格式类型应该是“漂亮的打印XML”)。
4.将XMLFormatter的输出连接到text_line输出特性类型。
运行工作区。您的输出应该如下所示。请注意在“位置”元素之后插入到建筑对象中的多个房间元素:
7445年第132位。 萨里 公元前 加拿大 -122.860 49.138 接待 管理 12销售办公室 销售 20.会议室 会议 25
运行后,已完成的工作区如下所示。注意,XMLTemplater对于根构建元素有一个输入特性,对于Room元素有三个输入特性,对于组合的XML文档的输出有一个输出特性。
©2019安全亚搏在线软件公司法律