Map端口使用脚本语言将XML文件转换为任意平面文件格式。
概览
Map端口有两种操作模式,可视化设计器和以脚本为中心的代码视图。设计器支持在文档类型之间可视化地建立简单的关系。更复杂的翻译需要代码视图,它利用强大的脚本语言来创建一个在XML和平面文件结构之间的映射模板。
首先,在“配置”选项卡中上传一个示例源文件和目标文件。如果两个示例文件的结构都允许设计器驱动的映射,那么可视化设计器将填充源和目标字段。该应用程序还将尝试用尽可能多的目标结构填充代码视图窗口。
端口配置
本节包含所有可配置的端口属性。
配置
端口配置
与端口核心操作相关的配置。
源文件 | 表示输入文档的XML结构的文件。端口处理的任何文件都应该具有匹配的XML结构。为了支持设计器驱动的映射,该文件必须是简单的XML或CSV结构。 |
目标文件 | 表示输出文档结构的文件。要使用设计器驱动的映射,该文件必须是简单的XML或CSV结构。 |
映射
定义输入和输出文件之间的映射关系。设计器视图可以映射简单的XML和CSV结构,代码视图可以映射更复杂的XML结构。有关更多详细信息,请参见使用设计器和使用代码视图。
自动
与端口自动处理文件有关的设置。
发送 | 是否自动处理该端口的消息。 |
高级配置
本地文件夹
确定文件将从磁盘上的哪个文件夹进行处理,以及文件处理后将放在何处的设置。
输入文件夹(Send) | 端口可以发送/上传放在此文件夹中的文件。如果启用了自动发送,端口将自动轮询处理此文件夹中的文件。 |
输出文件夹(Receive) | 端口会将接收/下载的文件放在此文件夹中。如果端口连接到工作流中的另一个端口,文件将不会保留在这里,而是传递到已连接端口的输入/Send文件夹。 |
已处理文件夹(Sent) | 处理文件后,如果启用了保存到已发送文件夹,端口将在此文件夹中放置已发送/已上传文件的副本。 |
性能
与端口获得的分配资源有关的设置。
最大线程数 | 线程池在此端口上处理文件所使用的最大工作线程数。 如果设置,则覆盖“配置文件”选项卡中的默认设置。 |
最大文件数 | 每次将工作线程分配给端口时,端口将处理的最大文件数。 如果设置,则覆盖“配置文件”选项卡中的默认设置。 |
其他配置
先前类别中未包含的配置。
发送过滤器 | 全局模式过滤器,以确定端口将处理Send文件夹中的哪些文件(例如* .txt)。 负模式可用于指示不处理的文件(例如-*.tmp)。 多个模式可以用逗号分隔,除非找到完全匹配的内容,否则后面的过滤器优先。 |
本地文件映射 | 用于确定本地文件名(由端口处理)的文件名称。 以下宏可用于引用上下文信息:%ConnectorId%, %Filename%, %FilenameNoExt%, %Ext%, %ShortDate%, %LongDate%, %RegexFilename:%, %DateFormat:%, %ControlNumber%, %TransactionControlNumber%, %TransactionCode%, %StandardVersion%. As an example: %FilenameNoExt%_%ControlNumber%%Ext% |
父端口 | 除非应在现有端口配置中明确覆盖设置,否则应从中继承设置的端口。 必须将其设置为与当前端口相同类型的端口。 |
日志信息 | 已处理文件的日志是否将包括文件本身的副本。 |
保存至Sent文件夹 | 端口已处理的文件是否应复制到端口的“Sent”文件夹。 |
使用设计器
可视化设计器仅适用于CSV和简单的XML文件。下面是一个简单的XML文档作为源文件的例子:
1 2 3 4 5 |
<actor table="actor"> <actor_id key="true">124455</actor_id> <first_name>Bob</first_name> <last_name>Smith</last_name> </actor> |
此示例源文件可能与以下CSV文档配对作为目标文件:
id,first name,last name,time
124455,Bob,Smith,2017-07-18T17:38:53-04:00
当这些文件配置为源文件和目标文件时,设计器显示源文件中每个源字段的行(actor_id, first_name, and last_name)。对于源中的每个字段,应通过下拉菜单选择适当的目标列。应用程序将根据列的名称自动尝试匹配源和目标字段。在上面的例子中,actor_id行将自动与id列匹配。
使用代码视图
代码视图提供了使用脚本手动生成映射模板的能力。这允许对可能的输入和输出格式进行更精细的控制。代码视图定义了目标文件呈现后的外观,脚本使用来自源文档的值动态填充模板。脚本都以“rsb”前缀开头,例如:
导航XML输入
脚本支持导航复杂的XML结构,以便从源文件中解析出值。xmlDOMSearch操作以xpath作为输入,并在给定路径上加载XML结构。此操作针对源文档中找到的xpath的每个实例循环;要加载整个文档并避免循环,请将XML源的根元素作为xmlDOMSearch的输入。例如:
1 2 3 |
<rsb:call op=xmlDOMSearch?xpath=/root> <!-- Inside this operation call the parsed XML elements can be accessed --> </rsb:call> |
一旦加载了XML文档,xpath格式化程序就支持从指定xpath处的XML中读取值。此格式化程序接受绝对XPath以及相对于xmlDOMSearch加载的路径的XPath。xpath格式化程序和所有格式化程序一样,只能在方括号内使用[]。例如:
1 2 3 |
<rsb:call op="xmlDOMSearch?xpath=/root/author"> [xpath('name')] </rsb:call> |
将以下简单的XML作为上述脚本的示例输入:
1 2 3 4 5 6 7 8 |
<root> <author> <name>Stephen King</name> </author> <author> <name>Kurt Vonnegut</name> </author> </root> |
在本例中,xmlDOMSearch操作将循环遍历“root”中的每个“author”元素。在每个“author”循环中,“name”元素的值作为输出文件中的内容读取。这种情况下的输出文件如下所示:
Stephen King Kurt Vonnegut
模板输出数据
代码视图用作输出文件的模板,ArcScript将值填入定义的模板。举个简单的例子,如果数据应该格式化为逗号分隔值,这些逗号可以作为代码视图的一部分,为脚本函数提供结构。因此,CSV文件可以从比设计器模式允许的更复杂的XML结构中生成。
以下面的XML为例,它包含阻止使用设计器模式的嵌套元素:
1 2 3 4 5 6 7 8 9 10 11 12 |
<actor table="actor"> <actor_id key="true">12445</actor_id> <name> <first_name>Viggo</first_name> <last_name>Mortensen</last_name> </name> <actor_id key="true">12522</actor_id> <name> <first_name>Gal</first_name> <last_name>Gadot</last_name> </name> </actor> |
通过将适当的路径传递给脚本的xpath格式化程序,可以轻松检索嵌套元素。这些格式化程序可以放在逗号内和标题名之后,以提供所需的CSV结构,另外一个csvescape格式化程序确保这些值被正确引用:
1 2 3 4 |
id,first name,last name <rsb:call op="xmlDOMSearch?xpath=actor"> [xpath('actor_id') | csvescape],[xpath('name/first_name') | csvescape],[xpath('name/last_name') | csvescape] </rsb:call> |
通过不断的模板数据和脚本调用的混合,可以生成各种文本文件。
附加脚本功能
由于完整的脚本在代码视图中可用,因此可能需要在模板中利用脚本操作。例如,如果源文件只包含数据库中某个项的标识,但需要该项的实际名称,则可以使用数据库查询操作来查找相应标识的名称。
脚本还支持映射模板中的条件逻辑。rsb:if关键字是可用于帮助在模板中执行条件逻辑的许多关键字之一。例如,如果源文件包含有关QuickBooks中客户的信息,可能需要为余额未清的客户执行不同的业务逻辑,而不是全额支付的客户。这个用例的一个简单例子可能如下所示:
1 2 3 4 5 6 7 8 |
<rsb:set item="Customer" attr="paidinfull" val="true" /> <rsb:call op="xmlDOMSearch?xpath=Customer"> <rsb:if exp="[xpath('balance')] > 0"> <rsb:set item="Customer" attr="paidinfull" val="false" /> </rsb:if> </rsb:call> id,first name,last name, paid in full [xpath('customer_id') | csvescape],[xpath('first_name') | csvescape],[xpath('last_name') | csvescape],[Customer.paidinfull] |
注:文案部分图片及内容来源于网络,版权归原创作者所有,如有侵犯到您的权益,请您联系我们进行删除,给您带来困扰,我们深感抱歉。