CSV端口可以将逗号分隔值(CSV)文件转换为XML,也可以从XML生成CSV文件。
概览
XML是知行EDI系统用于工作流中的主要数据格式。 因此,将CSV文件转换为XML作为在工作流中进行进一步处理的暂存步骤,或者在处理完XML之后将XML转换为CSV文件非常有用。 这两个操作都可以通过CSV端口完成。
有关将CSV转换为XML的详细信息,请参见下方“将CSV转换为XML”部分。 有关将XML转换为CSV的详细信息,请参见下方“将XML转换为CSV”部分。
端口配置
本文包含所有可配置的端口属性。
设置标签
CSV 配置
与端口核心操作相关的配置。
- 第一行是CSV文件标题信息CSV文件是否包含首行标题信息,这些标题为文件中的值提供名称或相关解释说明。
- 记录名称转换为XML时,代表CSV文件中一行的元素名称。 有关更多详细信息,请参见将CSV转换为XML。
本地文件夹
这些配置确定将待处理文件、已处理文件存在磁盘上的文件夹,以及输出后的文件夹放置何处。
- 输入文件夹(Send)端口可以处理放置在此文件夹中的文件。 如果启用了“自动化”,则端口将自动轮询此位置以处理文件。
- 输出文件夹(Receive)端口完成文件处理后,结果将放置在此文件夹中。 如果端口已连接到流程中的另一个端口,则文件将不会保留在此处,而是会传递到所连接端口的“输入/发送”文件夹中。
- 处理后文件夹(Sent)处理文件后,如果启用了“保存到Sent文件夹”,端口会将已处理文件的副本放置在此文件夹中。 该文件的副本将不会传递到流中的下一个端口。
其他配置
先前分类中包含的配置
- 保留消息副本已处理文件的日志条目是否将包括文件本身的副本。
- 保存到Sent文件夹端口处理的文件是否应复制到端口的“Sent”文件夹。
自动化
端口自动处理文件的相关配置。
- Send到达端口的消息是否将被自动处理。
将CSV转换为XML
将CSV文件转换为XML时,生成的XML具有以下结构:
1 2 3 4 5 6 7 |
<Items> <Record> <field_0>0</field_0> <field_1>1</field_1> <field_2>2</field_2> </Record> </Items> |
原始文件中的每一行(记录)都将成文根元素“Items”的子元素。所有记录元素的名称均由“记录名称”设置选项确定。然后每个记录元素都有对应于输出文件每一个行中的值的子元素。
一些CSV文件包含一行标题信息,这些标题信息为文件中的值提供了名称或相关解释说明。
启用“第一行是标题信息”配置后,将解析此标题行,并将解析的标题用作值元素(记录元素的子元素)的元素名称。
否则,将为值元素指定通用名称,例如field_0,field_1等。
将XML转换为CSV
要将XML转换为CSV文件,输入的XML必须具有“平面”结构。 这意味着,不管根元素如何,XML结构的深度都是2。例如:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
<Items> <film> <title> Citizen Kane </title> <year>1941</year> <runtime>119</runtime> </film> <film> <title> Sharknado </title> <year>2013</year> <runtime>86</runtime> </film> </Items> |
XML的解释如下:将根元素的子级视为结果文件中的记录(行),并将每个记录元素的子级视为每一行中的值。 如果启用了“第一行是标题信息”选项,则会将标题行插入到结果CSV文件中,其中包含每个值元素的名称,以提供值的上下文。 在上面的示例中,此标题行将由标题,年份和运行时组成。
CSV转换:使用XML Map 端口
许多数据转换流将CSV端口与XML Map端口结合使用。
通常,数据以CSV格式进入工作流,然后以其他某种格式(例如数据库插入,EDI文件,插入CRM或ERP数据源的插入等)结束工作流,反之亦然。 知行EDI系统使用单一的简化方法来满足以下数据转换要求:
- 将输入格式建模为XML
- 将输出格式建模为XML
- 使用XML Map 端口在输入XML与输出XML之间进行关系映射
因此,CSV端口通常与工作流中的XML Map 端口相邻:
在工作流中,当输入CSV文件时,CSV端口先将CSV文件转换为XML,然后将该XML发送到XML Map 端口进行转换。当输出CSV文件时,CSV端口从XML Map 端口接收XML文件,将其转换为CSV文件。
CSV端口包括上传测试文件功能,以简化用XML表示CSV文件的过程。
CSV 函数
除知行EDI系统随附的操作外,端口还可提供将功能扩展到Script中的操作。下面列出了CSV端口功能的特定操作。
csvListRecords
循环遍历指定CSV文件或字符串中的每个记录。
必要参数
- 文件:CSV文件的路径。
可选参数
- data:如果CSV数据以字符串形式存在而不是存储在CSV文件中,请使用此参数代替file。
- columns:以逗号分隔的列列表,包括在输出中(如果未指定,则将包括所有列)。
- requireheader:默认情况下,数据的第一行被解释为列标题;将false传递给此参数以使用通用列名(例如c1,c2,c3)。
输出
csvListRecords函数中的任何脚本将执行多次:对输入CSV文件/数据中找到的每个记录/行执行一次。在操作中,可以使用csv formatter程序访问单个CSV值。该格式化程序将列名作为参数,并输出该列中当前记录的值。
例如,假设CSV输入数据包含一组在订单中购买的商品,并且商品名称保存在“ItemName”列中。以下脚本生成一个XML,该XML在
1 2 3 4 5 |
<ItemList> <rsb:call op="csvListRecords?file=myFile.csv"> <Item>[csv('ItemName')]</Item> </rsb:call> </ItemList> |
注:文案部分图片及内容来源于网络,版权归原创作者所有,如有侵犯到您的权益,请您联系我们进行删除,给您带来困扰,我们深感抱歉。