ABAP和XML数据格式互相转换是广大开发人员经常遇到的需求。本文介绍两种方式。

1. ABAP提供了一个工具类cl_proxy_xml_transform,通过它的两个方法abap_to_xml_xstring和xml_xstring_to_abap实现两种格式的互换。

看具体例子:

REPORT zxm.

DATA: ls_abap TYPE zzcrmost__pro001dotproduct1.

DATA: ls_line LIKE LINE OF ls_abap-item.

ls_line-logsys = 'AG3'.

ls_line-object_family = '0401'.

ls_line-product_id = 'MCF-0001'.

ls_line-product_type = '01'.

APPEND ls_line TO ls_abap-item.

ls_line-logsys = 'QDD'.

ls_line-object_family = '0402'.

ls_line-product_id = 'MCF-0002'.

ls_line-product_type = '02'.

APPEND ls_line TO ls_abap-item.

DATA(xml) = cl_proxy_xml_transform=>abap_to_xml_xstring( EXPORTING abap_data = ls_abap ddic_type = 'ZZCRMOST__PRO001DOTPRODUCT1' ).

DATA: ls_abap2 LIKE ls_abap,

ls_abap3 LIKE ls_abap.

cl_proxy_xml_transform=>xml_xstring_to_abap( EXPORTING ddic_type = 'ZZCRMOST__PRO001DOTPRODUCT1' xml = xml IMPORTING abap_data = ls_abap2 ).

ASSERT ls_abap2 = ls_abap.

最后一行的ASSERT语句,说明从ABAP格式转换成XML格式,再转换成ABAP格式,转换前的ABAP数据和转换后的ABAP数据是完全相同的。

上述ABAP代码使用到的结构体zzcrmost__pro001dotproduct1类型定义如下:

如果我们单步调试工具类cl_proxy_xml_transform,发现它也没有神奇之处,

内部生成了一个ABAP simple transformation,以此来实现ABAP和XML格式的互相转换。

在调试器里记录下这个生成的transformation ID,然后用事务码STRANS打开,就可以看到明细了。

2. 有了方法1单步调试发现simple transformation的提示,我们可以用另一种更简单的办法实现两种格式的互换,即直接调用simple transformation:

DATA: lv_xml TYPE string.

CALL TRANSFORMATION id SOURCE b = ls_abap RESULT XML lv_xml.

生成的XML的根节点名称为b,因为上面代码调用参数SOURCE,将ABAP变量ls_abap传入时,绑定的参数名为“b”。

CALL TRANSFORMATION id SOURCE XML lv_xml RESULT b = ls_abap3.

ASSERT ls_abap2 = ls_abap3. 用这种方式进行ABAP->XML->ABAP仍然能得到最初的ABAP变量的值。

要获取更多Jerry的原创技术文章,请关注公众号"汪子熙"或者扫描下面二维码:

ABAP和XML数据格式互相转换的两种方式的更多相关文章

  1. 【转】java中byte数组与int类型的转换(两种方式)----不错

    原文网址:http://blog.csdn.net/piaojun_pj/article/details/5903009 java中byte数组与int类型的转换,在网络编程中这个算法是最基本的算法, ...

  2. C#复杂XML反序列化为实体对象两种方式

    前言 今天主要讲的是如何把通过接口获取到的Xml数据转换成(反序列化)我们想要的实体对象,当然Xml反序列化和Json反序列化的方式基本上都是大同小异.都是我们事先定义好对应的对应的Xml实体模型,不 ...

  3. java中byte数组与int类型的转换(两种方式)

    http://blog.csdn.net/z69183787/article/details/38564219 http://blog.csdn.net/z69183787/article/detai ...

  4. 简介C#读取XML的两种方式

    简介C#读取XML的两种方式 作者: 字体:[增加 减小] 类型:转载 时间:2013-03-03 在程序中访问进而操作XML文件一般有两种模型,分别是使用DOM(文档对象模型)和流模型,使用DOM的 ...

  5. iOS 通过URL网络获取XML数据的两种方式

    转载于:http://blog.csdn.net/crayondeng/article/details/8738768 下面简单介绍如何通过url获取xml的两种方式. 第一种方式相对简单,使用NSD ...

  6. Spring IOC 依赖注入的两种方式XML和注解

    依赖注入的原理 依赖注入的方式---XML配置 依赖注入的方式---注解的方式 Spring 它的核心就是IOC和AOP.而IOC中实现Bean注入的实现方式之一就是DI(依赖注入). 一 DI的原理 ...

  7. spring boot @ResponseBody转换JSON 时 Date 类型处理方法,Jackson和FastJson两种方式,springboot 2.0.9配置fastjson不生效官方解决办法

    spring boot @ResponseBody转换JSON 时 Date 类型处理方法 ,这里一共有两种不同解析方式(Jackson和FastJson两种方式,springboot我用的1.x的版 ...

  8. Java中将xml文件转化为json的两种方式

    原文地址https://blog.csdn.net/a532672728/article/details/76312475 最近有个需求,要将xml转json之后存储在redis中,找来找去发现整体来 ...

  9. 使用web.xml方式加载Spring时,获取Spring context的两种方式

    使用web.xml方式加载Spring时,获取Spring context的两种方式: 1.servlet方式加载时: [web.xml] <servlet> <servlet-na ...

随机推荐

  1. SPOJ:Decreasing Number of Visible Box(不错的,背包?贪心?)

    Shadowman loves to collect box but his roommates woogieman and itman don't like box and so shadowman ...

  2. 「 LuoguT37042」 求子序列个数

    Description 给定序列 A, 求出 A 中本质不同的子序列 (包含空的子序列) 个数模 10^9+ 7 的结果. 一个序列 B 是 A 的子序列需要满足 A 删掉某些元素后能够得到 B. 两 ...

  3. 线段树之成段更新( 需要用到延迟标记,简单来说就是每次更新的时候不要更新到底,用延迟标记使得更新延迟到下次需要更新or询问到的时候)

    HDU  1698 链接:  http://acm.hdu.edu.cn/showproblem.php?pid=1698 线段树功能:update:成段替换 (由于只query一次总区间,所以可以直 ...

  4. RobotFramework:App九宫格滑动解锁

    转自:http://blog.csdn.net/codekxx/article/details/50577381 手势密码在很多手机应用都会运到,手势密码都要求至少连接4个点,但AppiumLibra ...

  5. VC将同一份代码同时编译为Dll和Exe的方法

    开发中经常遇到这样的情况,需要开发一个某某功能的接口Dll,但是Dll不能直接调试,你至少需要一个Loader 但是Loader和Dll本身不在同一个工程里,虽然都在本机的话并不影响源码级调试,但是总 ...

  6. CentOS下安装SecureCRT的sz/rz工具包

    对于使用SecureCRT的玩家,rzsz是一个灰常灰常实用的功能.但是定制安装的linux可能没有把rzsz包安装到系统,这对用securecrt这样的windows工具传输文件特别不方便.为了使用 ...

  7. Java的四大基础特性

    Java的四大基础特性 一.抽象 父类为子类提供一些属性和行为,子类根据业务需求实现具体的行为. 抽象类使用abstract进行修饰,子类要实现所有的父类抽象方法否则子类也是抽象类. 二.封装 把对象 ...

  8. Event Handling Guide for iOS--(二)---Gesture Recognizers

    Gesture Recognizers 手势识别器 Gesture recognizers convert low-level event handling code into higher-leve ...

  9. 斯坦福CS231n—深度学习与计算机视觉----学习笔记 课时11

    课时11 神经网络训练细节part1(下) 2010年,Glorot等人写的论文,我们称之为Xavier初始化,他们关注了神经元的方差表达式.他们推荐一种初始化方式,那就是对每个神经元的输入进行开根号 ...

  10. winform 屏蔽 空格键

    private void call_KeyPress(object sender, KeyPressEventArgs e) { if (e.KeyChar == (char)Keys.Space) ...