ABAP和XML資料格式互相轉換的兩種方式

2021-08-28 02:47:05 字數 2176 閱讀 3647

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'..

ls_line-logsys

='qdd'

.ls_line-object_family

='0402'

.ls_line-product_id

='mcf-0002'

.ls_line-product_type

='02'..

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 ****** transformation,以此來實現abap和xml格式的互相轉換。

在偵錯程式裡記錄下這個生成的transformation id,然後用事務碼strans開啟,就可以看到明細了。

2. 有了方法1單步除錯發現****** transformation的提示,我們可以用另一種更簡單的辦法實現兩種格式的互換,即直接呼叫****** 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變數的值。

資料格式轉置

方案一 資料少時省事 private sub customtransform1 dim wb as workbook,sht as worksheet dim newsht as worksheet,dic as object dim endrow as long,irow set dic crea...

類xml資料格式解析

需要解析一種類xml的資料檔案,資料格式1如下 資料域,多個 phi rcs ang12 3234 phi rcs ang34 5456 資料格式2 xtype comment condition 項1 值1 項2 值2 condition mea key3 value3 key4 value4 m...

EasyUI List轉tree資料格式

using system using system.collections using system.collections.generic using system.linq using system.linq.expressions using system.reflection namespa...