ABAP和XML数据格式互相转换的两种方式
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的原创技术文章,请关注公众号"汪子熙"或者扫描下面二维码:
最新文章
- 用iMindMap如何提高我们绩效
- 解决Android与服务器交互大容量数据问题
- 设计模式之美:Iterator(迭代器)
- <;实训|第十三天>;linux中ACL权限控制以及磁盘配额,附编译属于自己的linux内核
- php 以图搜图
- easyui tree折叠
- android XMl 解析神奇xstream 二: 把对象转换成xml
- html添加keyword,description帮助百度收录处理方法,jsp去除空白行方法
- 快速打出System.out.println(";";);
- PMC
- Windows系统下使用Jenkins 自动发布 .NET core到Linux平台下Docker
- Docker集群编排工具之Kubernetes(K8s)介绍、安装及使用
- UNIX网络编程——利用ARP和ICMP协议解释ping命令
- Standford NLP study
- [译]Ocelot - Big Picture
- java虚拟机和内存优化总结
- python 中文报错
- Command &#39;ifconfig&#39; not found, but can be installed with: sudo apt install net-tools
- JQuery Cross Domain Ajax(jsonp)
- 整数中1出现的次数(1~n)
热门文章
- 简易五子棋 V1.1.0
- CodeForces19D:Points(线段树+set(动态查找每个点右上方的点))
- Com组件介绍
- 使用VirtualBox虚拟机搭建局域网(续)
- bzoj 3573: [Hnoi2014]米特运输【树形dp+瞎搞】
- iOS音频与视频的开发(二)- 使用AVAudioRecorder进行录制音频
- Hibernate绑定session保证session为单线程操作
- Nginx系列篇一:linux中安装Nginx
- android 百度地图
- 解决error while loading shared libraries