XML Map 端口进阶篇——常用关键字和格式化器详解
XML Map 端口是用于在不同XML之间建立关系映射的工具,允许通过拖拽操作实现源XML和目标 XML之间的数据字段映射,除此之外,XML Map 端口还提供了其它丰富多彩的功能,使用户能够更加灵活和高效的处理XML 数据映射任务,让我们一同深入探索这些功能吧。
以生成850订单为例:
点击下载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端口下映射编辑器处理的映射关系为例:
如上图所示,对于850订单来说,po_no订单号是必须要有的,所以我们需要对订单号进行必填校验,操作如下:
鼠标点击BEG02节点,右键选择新增,点击代码脚本
进入到 脚本 页面中:
复制上文介绍的代码并补充需要进行必填校验的字段名称:
脚本名称必须填写,本例写的是‘po_no的必填校验’,可根据自己的实际情况填写,填写后保存,显示如下:
扩展阅读:
check 关键字的使用方法
else关键字的使用方法
throw关键字的使用方法
条件映射编辑器
对于非必填字段,当其值为空时需要跳过该字段所在的segment,从而避免向客户发一个空的segment。这种灵活性使用户能够更好的控制数据映射过程,确保生成的目标文件符合交易伙伴的预期及要求。
使用【条件】进行跳过,例:鼠标浮在需要跳过的节点上,点击蓝色图标:
进入到条件映射编辑器,并点击添加条件:
在InputXML中选择对应的字段:
在等于处选择条件:
N1Loop1里涉及到两个字段,需要添加两个条件,当shipto_name或 shipto_no有一个不为空时就可进入N1Loop1,两个都为空时则跳过N1Loop1。
条件名称 可根据自身需求填写,可为空:
然后点击 保存 即可
自定义脚本检查物料行信息
代码示例如下:
<rsb:if exp="![hasxpath('')]"><rsb:throw code="error" desc="no " />
</rsb:if>
在映射编辑器中涉及到的映射关系如下:
对于物料部分,按照XML Map的取值逻辑,会先从源文件找PO_ITEM,如果找不到就会跳过,不会进入到具体字段的取值,所以即便你对物料部分的字段值做了必填值校验,也不会进入到这个校验里,所以我们需要对PO_ITEM先进行校验。
点击上图右侧PO1Loop1上面的任何节点,右键选择新增,点击添加代码脚本,弹窗如下:
复制代码,并根据实际情况修改如下,本例只需要在 脚本名称 下方的方框中填写脚本代码,然后保存即可。
脚本添加完成后,映射编辑器中将会显示如下内容:
表达式编辑器
格式化器支持操作不同xpath返回的值,比如当用户传过来的日期格式与目标格式不同,就需要进行日期格式转换,转换方法如下:
[xpath() | trim | todate('要转换的格式','被转换的格式')]
例:对于订单日期,用户传入EDI的格式是yyyy-MM-dd HH:mm:ss,而客户要求的格式是yyyyMMdd。
操作步骤:鼠标悬停在BEG05节点上,选择表达式。
进入表达式编辑器:
进行todate处理:
注意:需要先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处,点击表达式:
进入表达式编辑器:
参考示例代码进行拆分处理:
保存后显示如下:
截取字符串
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节点,右键选择新增,点击添加代码脚本。
复制代码,并根据实际情况修改如下,本例脚本名称填写脚本代码,然后保存即可。
虚拟节点
虚拟节点就是出现在XML设计器中,但是不会出现在XML输出里的一种特殊节点。
前面提到的脚本代码、条件都属于虚拟节点。本章节主要讲解的是XML Map端口中的第三种虚拟节点——循环。
循环一般用于减少层级,避免层级结构的重复,将输入文件中的重复元素’扁平化’为输出文件中的非分层结构。常用场景如下:
我们的输入文件如图左,需要的输出文件如图右:
点开XML Map上传源文件和目标文件,如下图:
鼠标点击上图右侧的child节点,右键选择 新增,点击 循环 。
对循环进行命名并保存。
将左侧源Parent节点拖拽到右侧的循环上创建Foreach关系,然后将源child节点拖拽映射到目标child节点。
点击右上角的测试映射进行测试,得到所需输入文件:
相关文章:

XML Map 端口进阶篇——常用关键字和格式化器详解
XML Map 端口是用于在不同XML之间建立关系映射的工具,允许通过拖拽操作实现源XML和目标 XML之间的数据字段映射,除此之外,XML Map 端口还提供了其它丰富多彩的功能,使用户能够更加灵活和高效的处理XML 数据映射任务,让…...

排序算法之——直接插入排序
直接插入排序——以升序排列为例 1.1基本思想1.2动态图示感知1.3静态图示详解1.4代码实现1.5时间复杂度1.5.1最好情况1.5.2最差情况 1.6空间复杂度1.7稳定性1.7.1一个小问题 1.1基本思想 把待排序的记录按其关键码值的大小逐个插入到一个已经排好序的有序序列中,直…...

突出最强算法模型——回归算法 !!
文章目录 1、特征工程的重要性 2、缺失值和异常值的处理 (1)处理缺失值 (2)处理异常值 3、回归模型的诊断 (1)残差分析 (2)检查回归假设 (3)Cooks 距离 4、学…...

云数据库 Redis 性能深度评测(阿里云、华为云、腾讯云、百度智能云)
在当今的云服务市场中,阿里云、腾讯云、华为云和百度智能云都是领先的云服务提供商,他们都提供了全套的云数据库服务,其中 Redis属于RDS 之后第二被广泛应用的服务,本次测试旨在深入比较这四家云服务巨头在Redis云数据库性能方面的…...

Android---Retrofit实现网络请求:Java 版
简介 在 Android 开发中,网络请求是一个极为关键的部分。Retrofit 作为一个强大的网络请求库,能够简化开发流程,提供高效的网络请求能力。 Retrofit 是一个建立在 OkHttp 基础之上的网络请求库,能够将我们定义的 Java 接口转化为…...

使用静态CRLSP配置MPLS TE隧道
正文共:1591 字 13 图,预估阅读时间:4 分钟 静态CRLSP(Constraint-based Routed Label Switched Paths,基于约束路由的LSP)是指在报文经过的每一跳设备上(包括Ingress、Transit和Egress…...

gentoo安装笔记
最近比较闲,所以挑战一下自己,在自己的台式电脑上安装gentoo 下面记录了我亲自安装的步骤,作为以后我再次安装时参考所用。 整体步骤 一般来将一个linux发行版的安装步骤其实大体上都差不多,基本分为一下几步: 1. …...

Git如何使用 五分钟快速入门
Git如何使用 五分钟快速入门 Git是一个分布式版本控制系统,它可以帮助开发人员跟踪和管理项目的代码变更。与传统的集中式版本控制系统(如SVN)不同,Git允许开发人员在本地存储完整的代码仓库,并且可以独立地进行代码修…...

FreeRTOS学习笔记——(FreeRTOS临界段代码保护及调度器挂起与恢复)
这里写目录标题 1,临界段代码保护简介(熟悉)2,临界段代码保护函数介绍(掌握)3,任务调度器的挂起和恢复(熟悉) 1,临界段代码保护简介(熟悉…...

箱形理论在交易策略中的实战应用与优化
箱形理论,简单来说,就是将价格波动分成一段一段的方框,研究这些方框的高点和低点,来推测价格的趋势。 在上升行情中,价格每突破新高价后,由于群众惧高心理,可能会回跌一段,然后再上升…...

MinIO 和 Apache Tika:文本提取模式
Tl;dr: 在这篇文章中,我们将使用 MinIO Bucket Notifications 和 Apache Tika 进行文档文本提取,这是大型语言模型训练和检索增强生成 LLM和RAG 等关键下游任务的核心。 前提 假设我想构建一个文本数据集,然后我可以用它来微调 LLM.为了做…...

c编译器学习05:与chibicc类似的minilisp编译器(待续)
minilisp项目介绍 项目地址:https://github.com/rui314/minilisp 作者也是rui314,commits也是按照模块开发提交的。 minilisp只有一个代码文件:https://github.com/rui314/minilisp/blob/master/minilisp.c 加注释也只有996行。 代码结构&a…...

手撕qsort函数
前言 本篇主要讲解的是qsort函数细节以及运用实例。 紧跟我的脚步一起手撕qsort函数吧~ 欢迎关注个人主页:逸狼 更多优质内容: 拿捏c语言指针(上) 拿捏c语言指针(中) 拿捏c语言指针(下&…...

项目在linux上的简单部署
本文章只介绍项目的简单部署,暂时没有Docker部署。 项目部署有两种方式,一种是直接命令部署,第二种是用脚本,脚本本身也是将命令进行封装来执行。 命令 项目通过maven打包,启动命令: # 启动命令 nohup …...

MySQL安装教程(详细版)
今天分享的是Win10系统下MySQL的安装教程,打开MySQL官网,按步骤走呀~ 宝们安装MySQL后,需要简单回顾一下关系型数据库的介绍与历史(History of DataBase) 和 常见关系型数据库产品介绍 呀,后面就会进入正式…...

Linux platform tree下的单总线驱动程序设计(DHT11)
目录 概述 1 认识DHT11 1.1 DHT11特性 1.2 DHT11数据格式 1.3 DHT11与MCU通信 1.4 DHT11信号解析 1.4.1 起始信号 1.4.2 解析信号0 1.4.3 解析信号1 2 驱动开发 2.1 硬件接口 2.2 更新设备树 2.2.1 添加驱动节点 2.2.2 编译.dts 2.2.3 更新板卡中的.dtb 2.3 驱…...

自研爬虫框架的经验总结(理论及方法)
背景: 由于业务需要,承接一部分的数据采集工作。目前市场内的一些通用框架不太适合。故而进行了自研。 对比自研和目前成熟的框架,自研更灵活适配,可以自己组装核心方法;后者对于新场景的适配需要对框架本身有较高的理…...

配置基于 AWS CRT 的 HTTP 客户端
基于 AWS CRT 的 HTTP 客户端包括同步 AwsCrtHttpClient 和异步 AwsCrtAsyncHttpClient。基于 AWS CRT 的 HTTP 客户端具有以下 HTTP 客户端优势: 更快的 SDK 启动时间 更小的内存占用空间 降低的延迟时间 连接运行状况管理 DNS 负载均衡 SDK 中基于 AWS CRT …...

挑战杯 基于LSTM的天气预测 - 时间序列预测
0 前言 🔥 优质竞赛项目系列,今天要分享的是 机器学习大数据分析项目 该项目较为新颖,适合作为竞赛课题方向,学长非常推荐! 🧿 更多资料, 项目分享: https://gitee.com/dancheng-senior/po…...

我为什么不喜欢关电脑?
程序员为什么不喜欢关电脑? 你是否注意到,程序员们似乎从不关电脑?别以为他们是电脑上瘾,实则是有他们自己的原因!让我们一起揭秘背后的原因,看看程序员们真正的“英雄”本色! 一、上大学时。 …...

Unity【角色/摄像机移动控制】【1.角色移动】
本文主要总结实现角色移动的解决方案。 1. 创建脚本:PlayerController 2. 创建游戏角色Player,在Player下挂载PlayerController脚本 3. 把Camera挂载到Player的子物体中,调整视角,以实现相机跟随效果 3. PlayerController脚本代码…...

Oracle12cR2之Job定时作业调度器详解
Oracle12cR2之Job定时作业调度器详解 文章目录 Oracle12cR2之Job定时作业调度器详解1.Oracle Job1. 关于Job2. 使用方法 2. Job详细说明1. 查看Job的相关视图2.SYS.DBA_JOBS视图字段详细说明 3. 创建及查看Job1. 创建Job2. 查看运行中的Job 1.Oracle Job 1. 关于Job 在 Oracle…...

python自学...
一、稍微高级一点的。。。 1. 闭包(跟js差不多) 2. 装饰器 就是spring的aop 3. 多线程...

Message Pack 协议详解及应用
文章目录 一、Message Pack是什么二、Message Pack的语法规则三、Message Pack相关链接四、Message Pack应用场景五、MessagePack 兼容性与特点 一、Message Pack是什么 Message Pack是一种高效的二进制序列化格式,用于在不同的应用程序之间进行数据交换。它类似于J…...

智慧社区管理系统:构建未来的生活模式
在这个信息化、智能化的时代,我们期待的不再是简单的居住空间,而是一个集安全、便捷、舒适、环保于一体的智能化社区。为此,我们推出了全新的智慧社区管理系统,旨在将先进的科技力量引入社区管理,为居民提供更优质的生…...

Rocky 8.9 Kubespray v2.24.0 在线部署 kubernetes v1.28.6 集群
文章目录 1. 简介2. 预备条件3. 基础配置3.1 配置hostname3.2 配置互信 4. 配置部署环境4.1 在线安装docker4.2 启动容器 kubespray4.3 编写 inventory.ini4.4 关闭防火墙、swap、selinux4.5 配置内核模块 5. 部署6. 集群检查 1. 简介 kubespray 是一个用于部署和管理 Kuber…...

新版AI系统ChatGPT源码支持GPT-4/支持AI绘画去授权
源码获取方式 搜一搜:万能工具箱合集 点击资源库直接进去获取源码即可 如果没看到就是待更新,会陆续更新上 新版AI系统ChatGPT网站源码支持GPT-4/支持AI绘画/Prompt应用/MJ绘画源码/PCH5端/免授权,支持关联上下文,意间绘画模型…...

学习鸿蒙基础(5)
一、honmonyos的page路由界面的路径 新建了一个page,然后删除了。运行模拟器的时候报错了。提示找不到这个界面。原来是在路由界面没有删除这个page。新手刚接触找了半天才找到这个路由。在resources/base/profile/main_pages.json 这个和微信小程序好类似呀。 吐槽…...

Tuxera NTFS2024最新中文版支持M1/M2/M3苹果全系机型
Tuxera NTFS的传输速度会受到多种因素的影响,包括硬件配置、文件大小、存储设备的性能等。因此,无法给出具体的传输速度数值。 不过,根据一些用户的使用经验和测试数据,Tuxera NTFS的传输速度通常都非常快,能够满足大…...

【Python】OpenCV-图片添加水印处理
图片添加水印处理 1. 引言 图像处理中的水印添加是一种常见的操作,用于在图片上叠加一些信息或标识。本文将介绍如何使用OpenCV库在图片上添加水印,并通过详细的代码注释来解释每一步的操作。 2. 代码示例 以下是一个使用OpenCV库的简单代码示例&…...