【发布时间】:2019-05-14 16:13:10
【问题描述】:
我在 Talend 中定义了一个 xml 模式,使用来自一个提供商的 xml 文件。我有多个需要单独处理的提供程序,但它们具有相同的 xml 格式。
我只想定义一次 xml 架构,但在多个作业中使用它,每个作业都有不同的文件名。然而,xml 模式似乎与文件名紧密相关,并且更改文件名使其成为内置类型。我不希望构建类型,因为我希望对 xml 架构进行一次更改。
有人能指出我正确的方向吗?这应该使用上下文来完成吗?
【问题讨论】:
我在 Talend 中定义了一个 xml 模式,使用来自一个提供商的 xml 文件。我有多个需要单独处理的提供程序,但它们具有相同的 xml 格式。
我只想定义一次 xml 架构,但在多个作业中使用它,每个作业都有不同的文件名。然而,xml 模式似乎与文件名紧密相关,并且更改文件名使其成为内置类型。我不希望构建类型,因为我希望对 xml 架构进行一次更改。
有人能指出我正确的方向吗?这应该使用上下文来完成吗?
【问题讨论】:
可以为一组文件定义一个架构(使用提供的向导或自己构建),然后只需从存储库中选择它即可使用该架构。
因此,作为示例,您可能希望遍历一个充满 XML 文件的文件夹,并使用相同的模式读取它们,然后将其加载到数据库中:
要做到这一点,您可以从 tFileList 开始,它指向充满 XML 文件的文件夹。像往常一样设置它(您可能需要在 *.xml" 上使用文件掩码),然后通过 Iterate 流将其链接到 tFileInputXML 组件,将文件名指定为:((String)globalMap.get("tFileList_1_CURRENT_FILEPATH"))。
现在从Schema 旁边的下拉框中选择Repository(应默认为Built-In。从这里只需选择先前为单个文件定义的 XML 架构。现在您可以只使用定义的架构,但更改其他所有内容(您可能只想控制文件名并保持其余部分不变)。
现在您可以简单地将其连接到您选择的数据库组件,例如tMySQLOutput,然后让数据库组件照常插入行。
【讨论】:
这很常见,但不幸的是没有一个优雅的解决方案。
上下文变量仅限于原始类型(几乎),而这样做的唯一方法是定义一个 xml 模式元数据,然后关闭到内置以仅更改文件名。这很丑陋,但 AFAIK 是唯一可能的解决方案。
【讨论】: