XML Map 端口进阶篇——常用关键字和格式化器详解

XML Map 端口是用于在不同XML之间建立关系映射的工具,允许通过拖拽操作实现源XML和目标 XML之间的数据字段映射,除此之外,XML Map 端口还提供了其它丰富多彩的功能,使用户能够更加灵活和高效的处理XML 数据映射任务,让我们一同深入探索这些功能吧。

以生成850订单为例:

EDI_XMLMap_connector1.png

点击下载850订单的源文件和目标文件

自定义脚本检查必填字段

使用check、else和 throw 三个关键字组合,代码如下:

<arc:check value="[xpath('字段xpath值') | def | trim]"><arc:else><arc:throw code="Miss value" desc="Miss 字段名"/></arc:else>
</arc:check>

以知行之桥EDI系统的XMLMap端口下映射编辑器处理的映射关系为例:

EDI_XMLMap_connector2.png

如上图所示,对于850订单来说,po_no订单号是必须要有的,所以我们需要对订单号进行必填校验,操作如下:

鼠标点击BEG02节点,右键选择新增,点击代码脚本

EDI_XMLMap_connector3.png

进入到 脚本 页面中:

EDI_XMLMap_connector4.png

复制上文介绍的代码并补充需要进行必填校验的字段名称:

EDI_XMLMap_connector5.png

脚本名称必须填写,本例写的是‘po_no的必填校验’,可根据自己的实际情况填写,填写后保存,显示如下:

EDI_XMLMap_connector6.png

扩展阅读:

check 关键字的使用方法
else关键字的使用方法
throw关键字的使用方法

条件映射编辑器

对于非必填字段,当其值为空时需要跳过该字段所在的segment,从而避免向客户发一个空的segment。这种灵活性使用户能够更好的控制数据映射过程,确保生成的目标文件符合交易伙伴的预期及要求。

使用【条件】进行跳过,例:鼠标浮在需要跳过的节点上,点击蓝色图标:

EDI_XMLMap_connector7.png

进入到条件映射编辑器,并点击添加条件:

EDI_XMLMap_connector8.png

在InputXML中选择对应的字段:

EDI_XMLMap_connector9.png

在等于处选择条件:

EDI_XMLMap_connector10.png

N1Loop1里涉及到两个字段,需要添加两个条件,当shipto_name或 shipto_no有一个不为空时就可进入N1Loop1,两个都为空时则跳过N1Loop1。

条件名称 可根据自身需求填写,可为空:

EDI_XMLMap_connector11.png

然后点击 保存 即可

EDI_XMLMap_connector12.png

自定义脚本检查物料行信息

代码示例如下:

<rsb:if exp="![hasxpath('')]"><rsb:throw code="error" desc="no " />
</rsb:if>

在映射编辑器中涉及到的映射关系如下:

EDI_XMLMap_connector13.png

对于物料部分,按照XML Map的取值逻辑,会先从源文件找PO_ITEM,如果找不到就会跳过,不会进入到具体字段的取值,所以即便你对物料部分的字段值做了必填值校验,也不会进入到这个校验里,所以我们需要对PO_ITEM先进行校验。

点击上图右侧PO1Loop1上面的任何节点,右键选择新增,点击添加代码脚本,弹窗如下:

EDI_XMLMap_connector14.png

复制代码,并根据实际情况修改如下,本例只需要在 脚本名称 下方的方框中填写脚本代码,然后保存即可。

EDI_XMLMap_connector15.png

脚本添加完成后,映射编辑器中将会显示如下内容:

EDI_XMLMap_connector16.png

表达式编辑器

格式化器支持操作不同xpath返回的值,比如当用户传过来的日期格式与目标格式不同,就需要进行日期格式转换,转换方法如下:

[xpath() | trim | todate('要转换的格式','被转换的格式')]

例:对于订单日期,用户传入EDI的格式是yyyy-MM-dd HH:mm:ss,而客户要求的格式是yyyyMMdd。

操作步骤:鼠标悬停在BEG05节点上,选择表达式。

EDI_XMLMap_connector17.png

进入表达式编辑器:

EDI_XMLMap_connector18.png

进行todate处理:

EDI_XMLMap_connector19.png

注意:需要先trim去空,再todate

扩展阅读:

文本格式化器trim的使用方法
日期格式化器todate的使用方法

如果传入的日期为空,todate会转成当前日期,所以当传入日期值为空时根据实际情况进行必填校验或者通过条件映射编辑器跳过。

除了todate之外,还有很多常见的字符串处理,比如split,substring ,toupper等

拆分字符串
split(delimiter,indextoreturn)
delimiter:用作分隔符的字符串,以该字符串对整个字段值进行拆分
indextoreturn:字段值被以分隔符拆分后的索引

例:收到一组服装信息,以 ; 隔开存放在一个字段里,需求是要取第二个颜色值,代码如下:

<rsb:set attr="testString" value="sweater;blue;women; wool"/>
<rsb:set attr="item.color" value="[testString | split(';',2)]"/>
<!—item.color:blue-->

XMLMap端口映射编辑器中对于拆分字符串的映射关系处理如下:

比如用户有多个工厂,对应多个编号,传过来的buyer_no字段包含每个工厂对应的编号,以;隔开,目前这个是A工厂发出的订单,要取的是第二个编号。将鼠标悬浮在N104处,点击表达式:

EDI_XMLMap_connector20.png

进入表达式编辑器:

EDI_XMLMap_connector21.png

参考示例代码进行拆分处理:

EDI_XMLMap_connector22.png

保存后显示如下:

EDI_XMLMap_connector23.png

截取字符串
substring (index[,length])
index:索引,从index处开始截取
length:要截取的长度,如果没有指定,则默认截取到该字段结束

例:需要将输入字段的前两位值读到输出字段里

<rsb:set attr="input.value " value="AB1234"/>
<rsb:set attr="output.value" value="[ input.value | substring(0,2)]"/>

在XML Map中的用法参考split格式化器

获取字符串的长度
getlength()
返回字符串的长度

例:将输入字段的长度写到输出字段里

<rsb:set attr="input.value " value="AB1234"/>
<rsb:set attr="output.value" value="[input.value | getlength()]"/>

在XML Map中的用法参考split格式化器

加减乘除计算
add(value) 
返回数字属性值和参数指定的值之和,默认值为1
multiply(value) 
返回数值属性值与参数的指定值相乘的结果,默认值为2
subtract(value)
返回数值属性值与参数指定值之间的差值
divide(value)
返回数值属性值除以参数指定值的结果

例:将输入字段值乘以1000给输出字段

<rsb:set attr="input.value " value="2"/>
<rsb:set attr="output.value" value="[input.value | multiply(1000)]"/>

在XML Map中的用法参考split格式化器

自定义目标文件名称

将业务类型和关键字段以及当前时间放在文件名上,方便有问题时,快速定位查询
代码如下:

<rsb:set attr="_message.header:filename" value="业务类型_[xpath() | trim]_[_ | now | todate('yyMMddHHmm')].xml"/>

例:对于850订单,一般使用订单号来沟通订单数据。

点击BEG节点,右键选择新增,点击添加代码脚本。

EDI_XMLMap_connector24.png

复制代码,并根据实际情况修改如下,本例脚本名称填写脚本代码,然后保存即可。

EDI_XMLMap_connector25.png

EDI_XMLMap_connector26.png

虚拟节点

虚拟节点就是出现在XML设计器中,但是不会出现在XML输出里的一种特殊节点。
前面提到的脚本代码条件都属于虚拟节点。本章节主要讲解的是XML Map端口中的第三种虚拟节点——循环

循环一般用于减少层级,避免层级结构的重复,将输入文件中的重复元素’扁平化’为输出文件中的非分层结构。常用场景如下:

我们的输入文件如图左,需要的输出文件如图右:

EDI_XMLMap_connector27.png

点开XML Map上传源文件和目标文件,如下图:

EDI_XMLMap_connector28.png

鼠标点击上图右侧的child节点,右键选择 新增,点击 循环 。

EDI_XMLMap_connector29.png

对循环进行命名并保存。

EDI_XMLMap_connector30.png

将左侧源Parent节点拖拽到右侧的循环上创建Foreach关系,然后将源child节点拖拽映射到目标child节点。

EDI_XMLMap_connector31.png

点击右上角的测试映射进行测试,得到所需输入文件:

EDI_XMLMap_connector32.png

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/693406.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

以程序员的视角,看前后端分离的是否必要?

Hello&#xff0c;我是贝格前端工场&#xff0c;本篇分享一个老生常谈的话题&#xff0c;前后端分离是必然趋势&#xff0c;但也是要区分具体的场景&#xff0c;欢迎探讨&#xff0c;关注&#xff0c;有前端开发需求可以私信我&#xff0c;上车了。 一、什么是前后端分离和不分…

Bert-VITS-2 效果挺好的声音克隆工具

持中日英三语训练和推理。内置干声分离&#xff0c;切割和标注工具&#xff0c;开箱即用。请点下载量右边的符号查看镜像所对应的具体版本号。 教程地址&#xff1a; sjj​​​​​​​CodeWithGPU | 能复现才是好算法CodeWithGPU | GitHub AI算法复现社区&#xff0c;能复现…

分享一个背英语单词的方法

目录 前言 乱序记忆法 结语 前言 这是我现在正在用的背单词方法&#xff0c;我觉得是不错的&#xff0c;分享一下&#xff0c;希望对你有帮助。也欢迎评论点赞哟。 乱序记忆法 这种方法需要我们准备好纸&#xff0c;是需要我们动笔的。我坚持认为&#xff0c;动笔去记单词的…

人工智能专题: Sora,世界模拟器的视频生成器

今天分享的是人工智能系列深度研究报告&#xff1a;《人工智能专题&#xff1a; Sora&#xff0c;世界模拟器的视频生成器》。 &#xff08;报告出品方&#xff1a;华泰证券&#xff09; 报告共计&#xff1a;16页 来源&#xff1a;人工智能学派 Sora 能做什么&#xff1f;…

苍穹外卖——第一天nginx

放到全是英文路径的打不开 到安装路径进入cmd&#xff0c;输入nginx -t nginx: the configuration file E:\Astudy\nginx-1.20.2/conf/nginx.conf syntax is ok nginx: [emerg] bind() to 0.0.0.0:80 failed (10013: An attempt was made to access a socket in a way forbid…

Fiddler工具 — 18.Fiddler抓包HTTPS请求(一)

1、Fiddler抓取HTTPS过程 第一步&#xff1a;Fiddler截获客户端发送给服务器的HTTPS请求&#xff0c;Fiddler伪装成客户端向服务器发送请求进行握手 。 第二步&#xff1a;服务器发回相应&#xff0c;Fiddler获取到服务器的CA证书&#xff0c; 用根证书&#xff08;这里的根证…

UI自动化之使用poco进行元素的唯一定位

直接选择&#xff1a; 1.poco(text买入).click() 2.poco("android.widget.ImageView").click()相对选择、空间选择&#xff1a; 3.poco(text/name).parent().child()[0].click()正则表达式&#xff1a; 4.listpoco(textMatches".*ETF")今天主要想记录下…

《剑指Offer》笔记题解思路技巧优化 Java版本——新版leetcode_Part_5

《剑指Offer》笔记&题解&思路&技巧&优化_Part_5 &#x1f60d;&#x1f60d;&#x1f60d; 相知&#x1f64c;&#x1f64c;&#x1f64c; 相识&#x1f622;&#x1f622;&#x1f622; 开始刷题&#x1f7e2;1. LCR 158. 库存管理 II——数组中出现次数超过一…

SQL数据库基础语法-增删改

SQL数据库基础语法-增删改 数据库是 ​ “按照数据结构来组织、存储和管理数据的仓库”。是一个长期存储在计算机内的、有组织的、可共享的、统一管理的大量数据的集合。 GeekSec专注技能竞赛培训5年&#xff0c;包含网络建设与运维和信息安全管理与评估两大赛项&#xff0c;…

synchronized原理Callable接口

synchronized原理 特点 1.synchronized既是一个悲观锁,又是个乐观锁&#xff0c;自适应的&#xff01; synchronized默认是乐观锁,但是如果发现锁竞争比较激烈,就会变成悲观锁!!2.synchronized既是轻量级锁,又是一个重量级锁,自适应&#xff01; synchronized默认是轻量…

字符串算法(算法竞赛)--最小表示法与最详细的字符串哈希

1、B站视频链接&#xff1a;F01 最小表示法_哔哩哔哩_bilibili 题目链接&#xff1a;【模板】最小表示法 - 洛谷 #include <bits/stdc.h> using namespace std; const int N7e5; int n; int s[N];int get_min(){for(int i1;i<n;i)s[ni]s[i];//字符串复制一倍int i1,j…

车载软件架构Adaptive AUTOSAR —— 身份和访问管理和加密技术

车载软件架构Adaptive AUTOSAR —— 身份和访问管理和加密技术 我是穿拖鞋的汉子,魔都中坚持长期主义的汽车电子工程师(Wechat:gongkenan2013)。 老规矩,分享一段喜欢的文字,避免自己成为高知识低文化的工程师: 本就是小人物,输了就是输了,不要在意别人怎么看自己。…

辽宁博学优晨教育科技有限公司视频剪辑培训靠谱吗?

在数字媒体日益繁荣的今天&#xff0c;视频剪辑已成为一项炙手可热的技能。不少培训机构纷纷涉足这一领域&#xff0c;辽宁博学优晨教育科技有限公司便是其中之一。然而&#xff0c;面对众多的选择&#xff0c;很多人不禁要问&#xff1a;辽宁博学优晨教育科技有限公司的视频剪…

【深度学习每日小知识】交并集 (IoU)

交并集 (IOU) 是一种性能指标&#xff0c;用于评估注释、分割和对象检测算法的准确性。它量化数据集中的预测边界框或分段区域与地面实况边界框或注释区域之间的重叠。 IOU 提供了预测对象与实际对象注释的对齐程度的衡量标准&#xff0c;从而可以评估模型准确性并微调算法以改…

中科大计网学习记录笔记(十四):多路复用与解复用 | 无连接传输:UDP

前言&#xff1a; 学习视频&#xff1a;中科大郑烇、杨坚全套《计算机网络&#xff08;自顶向下方法 第7版&#xff0c;James F.Kurose&#xff0c;Keith W.Ross&#xff09;》课程 该视频是B站非常著名的计网学习视频&#xff0c;但相信很多朋友和我一样在听完前面的部分发现信…

人形机器人专题:传感器,人形机器人实现“具身感知”的关键

今天分享的是人形机器人系列深度研究报告&#xff1a;《人形机器人专题&#xff1a;传感器&#xff0c;人形机器人实现“具身感知”的关键》。 &#xff08;报告出品方&#xff1a;浙商证券股份有限公司&#xff09; 报告共计&#xff1a;44页 来源&#xff1a;人工智能学派…

Redis篇----第十篇

系列文章目录 文章目录 系列文章目录前言一、Redis 集群如何选择数据库?二、怎么测试 Redis 的连通性?三、怎么理解 Redis 事务?四、Redis 事务相关的命令有哪几个?五、Redis key 的过期时间和永久有效分别怎么设置?前言 前些天发现了一个巨牛的人工智能学习网站,通俗易…

备考2025年AMC8数学竞赛:2000-2024年AMC8真题练一练

对于想了解或者加AMC8美国数学竞赛的孩子来说&#xff0c;熟悉AMC8的历年考试真题&#xff0c;既可以了解考试的内容、形式、难度&#xff0c;还可以看看自己的掌握程度&#xff0c;发现自己的短板查漏补缺&#xff0c;毕竟&#xff0c;这个比赛考察的知识点相对固定&#xff0…

14. rk3588自带的RKNNLite检测yolo模型(python)

首先将文件夹~/rknpu2/runtime/RK3588/Linux/librknn_api/aarch64/下的文件librknnrt.so复制到文件夹/usr/lib/下&#xff08;该文件夹下原有的文件librknnrt.so是用来测试resnet50模型的&#xff0c;所以要替换成yolo模型的librknnrt.so&#xff09;&#xff0c;如下图所示&am…

【Python爬虫】requests库get和post方法使用

requests库是一个常用于http请求的模块&#xff0c;性质是和urllib&#xff0c;urllib2是一样的&#xff0c;作用就是向指定目标网站的后台服务器发起请求&#xff0c;并接收服务器返回的响应内容。 1. 安装requests库 使用pip install requests安装 如果再使用pip安装python…