斯潘8
斯潘4
XML是结构化文本的一种形式,通常在开放标准和交换格式中使用。它在Web和消息传递应用程序中也经常遇到。能够将数据转换为XML是FME的一项重要功能。本文介绍了FME编写XML的方法,并包括一个基本的示例来帮助您入门。它假设对基本的FME和XML概念有一些了解。例如,XML中的术语“element”可以与FME术语中的特性或属性相关,取决于XML文档的解释方式。见XML的FME方法了解更多背景。
FME使用模板方法来编写XML。XML文档结构放置在xmlTemplater转换器中或由其引用。然后,fme:get属性函数被放置在模板中希望特征属性值合并到文档中的位置。这就像邮件合并操作,其中,字母模板从每个记录接收名称和地址值,以动态生成自定义消息。
可以为每个功能生成一个XML文档,如数据集元数据。或者,根模板和子模板可用于对具有一个根的文档进行建模,该文档具有基于多记录数据集的多个子元素。XML文档结构可以使用xmlsamplegenerator从XSD生成,也可以从示例XML输出文档获取。然后使用fme:get属性函数将元素值替换为fme字段值,在这里我们希望内容由源数据驱动。由xmlTemplater生成的XML存储在一个单独的result属性中,然后可以使用xmlValidator和xmlFormatter转换器验证和格式化该属性。在本练习中,我们使用示例XML为模板种子,并将验证和格式化留给以后的练习。
通常,最终输出使用文本文件编写器写入磁盘,因为XML结果属性只是一个大的文本字段。XML编写器并不常用,因为它还不支持从XSD中读取模式。在一些特殊情况下,XML编写器是有益的,例如,使用片段模式来编写非常大的XML数据集。这种高级方法允许在收到XML片段时写入它们,而不是在写入之前构建整个文档的缓冲区,就像文本文件编写器那样。
下面的练习演示如何将单个记录送入xmlTemplater模板,并生成一个基本的XML文档,该文档与safe-building-demo.xml中的结构相匹配。亚搏在线
1。打开FME工作台。
从空白工作区开始。拖放附加的源csv文件:building.scv。
2。添加一个xmlTemplater。
将其转换为XML的第一步是生成根元素。要创建XML模板,我们从要生成的XML文件类型的示例的根对象复制内容-在本例中,从safe_building_demo.xml复制根。亚搏在线
添加一个xmlTemplater,将csv源构建功能类型连接到它,编辑xmlTemplater并将以下内容放入根模板中:
街道地址 城市 公元前 加拿大 零 零
三。在xmlTemplater之后连接一个记录器并运行工作区。
注意,模板只是简单地写到输出结果字段中。
我们真正想要的是在编写XML之前将输入csv记录中的值合并到模板中。为此,我们只需打开xmlTemplater,编辑根目录,单击要合并值的每个元素的内容,然后单击要合并值的属性。这应该将与我们选择的属性相关联的属性函数(fme:get attribute(“building_id”)等)插入到我们定位光标的模板位置中。
完成所有可用属性的操作后,您应该有一个如下所示的根模板:
fme:get属性(“地址”) fme:get属性(“城市”) fme:get属性(“省”) fme:get attribute(“country”) fme:get属性(“经度”) fme:get属性(“纬度”)
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 四十九点一三八
下面的练习演示如何从1.a中获取工作区,并使用xmlTemplater子模板根据输入记录添加多个子元素。
回到我们原来的任务,我们希望使用FME生成与safe_building_demo.xml中的结构匹配的XML内容。亚搏在线我们在示例1a中生成了根内容,所以下一步是生成房间元素。
1。第一,添加新的csv阅读器以读取rooms.csv。
2。下一步,编辑xmlTemplater。
检查子模板并单击“+”以添加新的子模板。
图1。带子模板的XmlTemplater配置
和之前一样,我们用要生成的对象的单个示例实例或元素来启动模板。在这种情况下,我们需要一个房间元素的例子,我们可以从safe_building_demo.xml的第一个房间获得:亚搏在线
前台 行政 十二
然后单击“确定”将更改保存到xmlTemplater。您将注意到xmlTemplater上名为“sub”的新输入端口。我们需要将房间输入功能连接到这个,以便在功能模式上为xmlTemplater提供所需的字段。
现在房间特征类型已连接,我们可以用从输入csv文件中读取的值替换这些值。这将生成如下所示的子模板:
fme:get attribute(“name”) fme:get attribute(“category”) fme:get属性(“区域”)
要完成xmlTemplater配置,我们需要告诉根模板调用子模板。这是使用fme:process features(“sub”)函数完成的。将此项添加到根模板中,以便在建筑父对象的末尾插入房间子元素。
fme:get属性(“地址”) fme:get属性(“城市”) fme:get属性(“省”) fme:get attribute(“country”) FME:过程特征(“SUB”) fme:get属性(“经度”) fme:get属性(“纬度”)
三。在xmlTemplater之后添加一个xmlFormatter。
最后,在写入磁盘之前格式化XML是个好主意。这使得查看输出和解决任何问题变得更加容易,而且还有一个额外的好处,那就是可以捕获语法错误,因为只能格式化有效的XML。稍后我们将更详细地讨论验证。
在xmlTemplater之后添加一个xmlFormatter。将“attribute with xml text”和“attribute to contain xml output”设置为“text_line_data”。将其余设置保留为其默认值(格式类型应为“pretty print xml”。
4。将xmlFormatter的输出连接到文本行输出功能类型。
运行工作区。您的输出应如下所示。请注意,在位置元素之后插入到建筑对象中的多个房间元素:
7445 132街 萨里 公元前 加拿大 -122.860 四十九点一三八 前台 行政 十二销售办事处 销售额 二十会议室 会议 二十五
运行后,完成的工作区如下所示。注意,xmlTemplater有一个根构建元素的输入功能,3个房间元素的输入功能和一个组合XML文档输出的输出功能。
?2019安全亚搏在线软件公司|合法的