当前位置: 首页 > news >正文

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

相关文章:

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

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

排序算法之——直接插入排序

直接插入排序——以升序排列为例 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基本思想 把待排序的记录按其关键码值的大小逐个插入到一个已经排好序的有序序列中&#xff0c;直…...

突出最强算法模型——回归算法 !!

文章目录 1、特征工程的重要性 2、缺失值和异常值的处理 &#xff08;1&#xff09;处理缺失值 &#xff08;2&#xff09;处理异常值 3、回归模型的诊断 &#xff08;1&#xff09;残差分析 &#xff08;2&#xff09;检查回归假设 &#xff08;3&#xff09;Cooks 距离 4、学…...

云数据库 Redis 性能深度评测(阿里云、华为云、腾讯云、百度智能云)

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

Android---Retrofit实现网络请求:Java 版

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

使用静态CRLSP配置MPLS TE隧道

正文共&#xff1a;1591 字 13 图&#xff0c;预估阅读时间&#xff1a;4 分钟 静态CRLSP&#xff08;Constraint-based Routed Label Switched Paths&#xff0c;基于约束路由的LSP&#xff09;是指在报文经过的每一跳设备上&#xff08;包括Ingress、Transit和Egress&#xf…...

gentoo安装笔记

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

Git如何使用 五分钟快速入门

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

FreeRTOS学习笔记——(FreeRTOS临界段代码保护及调度器挂起与恢复)

这里写目录标题 1&#xff0c;临界段代码保护简介&#xff08;熟悉&#xff09;2&#xff0c;临界段代码保护函数介绍&#xff08;掌握&#xff09;3&#xff0c;任务调度器的挂起和恢复&#xff08;熟悉&#xff09; 1&#xff0c;临界段代码保护简介&#xff08;熟悉&#xf…...

箱形理论在交易策略中的实战应用与优化

箱形理论&#xff0c;简单来说&#xff0c;就是将价格波动分成一段一段的方框&#xff0c;研究这些方框的高点和低点&#xff0c;来推测价格的趋势。 在上升行情中&#xff0c;价格每突破新高价后&#xff0c;由于群众惧高心理&#xff0c;可能会回跌一段&#xff0c;然后再上升…...

MinIO 和 Apache Tika:文本提取模式

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

c编译器学习05:与chibicc类似的minilisp编译器(待续)

minilisp项目介绍 项目地址&#xff1a;https://github.com/rui314/minilisp 作者也是rui314&#xff0c;commits也是按照模块开发提交的。 minilisp只有一个代码文件&#xff1a;https://github.com/rui314/minilisp/blob/master/minilisp.c 加注释也只有996行。 代码结构&a…...

手撕qsort函数

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

项目在linux上的简单部署

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

MySQL安装教程(详细版)

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

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 驱…...

自研爬虫框架的经验总结(理论及方法)

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

配置基于 AWS CRT 的 HTTP 客户端

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

挑战杯 基于LSTM的天气预测 - 时间序列预测

0 前言 &#x1f525; 优质竞赛项目系列&#xff0c;今天要分享的是 机器学习大数据分析项目 该项目较为新颖&#xff0c;适合作为竞赛课题方向&#xff0c;学长非常推荐&#xff01; &#x1f9ff; 更多资料, 项目分享&#xff1a; https://gitee.com/dancheng-senior/po…...

我为什么不喜欢关电脑?

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

如何快速掌握Switch-Toolbox:终极任天堂游戏文件编辑完整指南

如何快速掌握Switch-Toolbox&#xff1a;终极任天堂游戏文件编辑完整指南 【免费下载链接】Switch-Toolbox A tool to edit many video game file formats 项目地址: https://gitcode.com/gh_mirrors/sw/Switch-Toolbox 如果你一直想修改任天堂Switch、3DS或Wii U游戏文…...

Python量化投资终极指南:MOOTDX让通达信数据获取变得如此简单

Python量化投资终极指南&#xff1a;MOOTDX让通达信数据获取变得如此简单 【免费下载链接】mootdx 通达信数据读取的一个简便使用封装 项目地址: https://gitcode.com/GitHub_Trending/mo/mootdx 还在为股票数据的获取而烦恼吗&#xff1f;你是否曾经花费数小时研究复杂…...

博客从 Ubuntu 16.04 迁移到 FreeBSD:成本减半,性能提升超 10 倍!

Bruno Croci 的网站迁移之旅Bruno Croci 正在为 2026 年柏林的开源硬件峰会做准备。他的博客在 Ubuntu 16.04 上运行了 10 年&#xff0c;于 2026 年 5 月 21 日&#xff0c;他将其迁移到了 FreeBSD。迁移动机&#xff1a;旧系统的安全隐患与成本考量这个博客在 Digital Ocean …...

Unity签到系统架构设计:配置驱动与状态同步实践

1. 这不是个“签到页面”&#xff0c;而是一套可落地的用户留存引擎很多人看到“Unity七日签到”第一反应是&#xff1a;不就是做个UI面板&#xff0c;点七次按钮&#xff0c;发七种奖励&#xff1f;我试过——真这么干&#xff0c;上线三天就被运营打回来重做。原因很简单&…...

TokUnion 技术架构解析:AI+GEO 驱动的跨境增长数据闭环设计

摘要最近这个时间段&#xff0c;是国货出海精细化与合规化转型背景的深度期&#xff0c;传统粗放式广告投放&#xff0c;和单一渠道运营模式面临获客成本高、ROI 不可控、数据孤岛、合规风险突出等问题。下面这个文章&#xff0c;我会以TokUnion数字化协同体系为研究对象&#…...

easyPoi使用

一、核心定位区别 EasyPoi&#xff1a;全能型&#xff0c;支持 Excel、Word、PDF 导出&#xff0c;注解极简&#xff0c;适合小数据、快速开发EasyExcel&#xff1a;高性能型&#xff0c;只专注 Excel&#xff0c;主打低内存、大数据量&#xff0c;适合海量数据导出 二、Easy…...

Agent 框架别急着乱学:先用 LangChain 搞懂 7 个基本模块

先说结论。 如果你想系统理解 Python Agent 框架&#xff0c;LangChain 仍然值得作为第一篇。它不是最轻的&#xff0c;也不是最“自动化”的&#xff0c;但它把 Agent 应用里的关键零件都摆出来了&#xff1a;模型、工具、状态、记忆、middleware、多 Agent 路由和 tracing。…...

基于国产可控硅LTH16-08的电风扇无极调速方案设计与实践

1. 项目概述&#xff1a;当可控硅遇上电风扇 最近在帮一个做小家电的朋友优化一款电风扇的电路板&#xff0c;核心需求是想实现一个无极调速功能&#xff0c;让风扇的风量可以从微风到强风平滑过渡&#xff0c;而不是传统的三档或五档机械开关。这个需求听起来简单&#xff0c;…...

大规模矩阵SVD与GSVD计算方法【附代码】

✨ 长期致力于办公建筑设计、建筑能耗、光性能、热性能、modeFRONTIER、多目标优化、性能模拟、寒冷地区研究工作&#xff0c;擅长数据搜集与处理、建模仿真、程序编写、仿真设计。 ✅ 专业定制毕设、代码 ✅ 如需沟通交流&#xff0c;点击《获取方式》 &#xff08;1&#xff…...

Unity动态设置Layer与摄像机屏蔽的完整闭环方案

1. 这不是“加个Layer”那么简单&#xff1a;为什么动态设置Layer常被误用却没人深究在Unity项目里&#xff0c;我见过太多人把“给GameObject动态设置Layer”当成一个随手就能调用的API——go.layer 12;&#xff0c;敲完回车&#xff0c;心里就默认“好了”。结果跑起来发现&…...