ABAP和XML数据格式互相转换的两种方式

举报
汪子熙 发表于 2021/11/29 22:52:06 2021/11/29
【摘要】 ABAP和XML数据格式互相转换是广大开发人员经常遇到的需求。本文介绍两种方式。1. ABAP提供了一个工具类cl_proxy_xml_transform,通过它的两个方法abap_to_xml_xstring和xml_xstring_to_abap实现两种格式的互换。看具体例子:REPORT zxm.DATA: ls_abap TYPE zzcrmost__pro001dotproduct...

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变量的值。

这个命令行神器的下载地址:https://stedolan.github.io/jq/#

Windows和Linux版本均只有两个可执行文件,大小不过2MB多。

以Windows版本为例,介绍其用法。

假设我有一个复杂的json文件,用Sublime Text等文本编辑器打开,格式很乱。

此时使用命令行 jq-win64.exe . a.json:

jq会自动美化这个json文件,将美化后的内容打印到控制台上。

这意味着我们可以用重定向符号> 将美化后的字符串导入到一个新的json文件里:

这是purified.json在Sublime Text里打开的样子,是不是非常美观?

有了jq,大家再也不需要使用很多速度很慢的JSON文件在线美化网站啦。

jq的功能远远不止美化json内容这么简单。

例如:查询所有键为Attributes的值字段:

结果和我们用json文件浏览器看到的一致:

Linux的用法和windows完全一致。

要获取更多Jerry的原创技术文章,请关注公众号"汪子熙"。

【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。