SAP中XML文件与内表的相互转换

SAP中XML文件与内表的相互转换

XML模板定义

TCode:STRANS

创建xml文件模板,命名为ZXML*.

<?sap.transform simple?>
<tt:transform xmlns:tt="http://www.sap.com/transformation-templates">
<!--内表变量名,可以为多个 -->
<tt:root name="itmara"/>

<tt:template>
    <Products>
    <!-- 循环体 name与内表名一致-->
        <tt:loop name="line" ref="itmara">
            <Product>
                <matnr>
                <!-- ref的值应为内表中的字段名 -->
                  <tt:value ref="$line.matnr"/>
                </matnr>
                <maktx>
                  <tt:value ref="$line.maktx"/>
                </maktx>
            </Product>
        </tt:loop>
    </Products>

</tt:template>

</tt:transform>

创建测试程序

*&---------------------------------------------------------------------*
*& Report  ZSKGJ_DOWNLOAD_DETAIL
*&
*&---------------------------------------------------------------------*
*& 
*& 2017-08-14 13:58:11
*&---------------------------------------------------------------------*

REPORT  ZSKGJ_DOWNLOAD_DETAIL.

DATA:p_client TYPE REF TO IF_HTTP_CLIENT.
DATA:p_data TYPE string,
     l_bindata type xstring,
     l_cntbin TYPE sdokcntbins,

DATA:  BEGIN OF it_xml OCCURS 0,
         line(100) TYPE c,
       END OF it_xml.
DATA: w_xml TYPE string,
      w_len TYPE i,
      w_fname TYPE string.
DATA: BEGIN OF line  ,
        matnr LIKE mara-matnr ,
        maktx LIKE makt-maktx ,
      END OF line .
DATA: itab_matnr LIKE TABLE OF line.

START-OF-SELECTION.
  PERFORM getdata.
  PERFORM create_xml.
  PERFORM decod_xml.
*&---------------------------------------------------------------------*
*&      Form  GETDATA
*&---------------------------------------------------------------------*
*       查询数据
*----------------------------------------------------------------------*
FORM GETDATA .
SELECT matnr maktx FROM makt
  INTO TABLE itab_matnr
  UP TO 4 ROWS
  WHERE spras = '1' .
ENDFORM.                    " GETDATA
*&---------------------------------------------------------------------*
*&      Form  CREATE_XML
*&---------------------------------------------------------------------*
*       内表转换为XML字符串
*----------------------------------------------------------------------*
FORM CREATE_XML .
*  此处即创建的XML模板,SOURCE为待转换内表,RESULT XML即返回的XML字符串
  CALL TRANSFORMATION zxml_skgj
    SOURCE itmara = itab_matnr
    RESULT XML w_xml.

*  将XML转换为binary,再转换为string,实现UTF-16转为UTF-8,最终将UTF-8替换为GB2312
  CALL FUNCTION 'SCMS_XSTRING_TO_BINARY'
    EXPORTING
      BUFFER               = l_bindata
    IMPORTING
     OUTPUT_LENGTH         = w_len
    TABLES
      BINARY_TAB           = l_cntbin
            .
  IF sy-subrc = 0.
    CLEAR w_xml.
    CALL FUNCTION 'SCMS_BINARY_TO_STRING'
    EXPORTING
    INPUT_LENGTH = w_len
    IMPORTING
    TEXT_BUFFER = w_xml
    OUTPUT_LENGTH = w_len
    TABLES
    BINARY_TAB = l_cntbin.
    IF sy-subrc = 0.
      REPLACE 'UTF-8' WITH 'GB2312' INTO w_xml.
    ENDIF.
  ENDIF.
ENDFORM.                    " CREATE_XML
*&---------------------------------------------------------------------*
*&      Form  DECOD_XML
*&---------------------------------------------------------------------*
*       解码xml
*----------------------------------------------------------------------*
FORM DECOD_XML .
  DATA: lo_oref TYPE REF TO cx_st_error.
  DATA: lv_msg TYPE string.

  TRY .
    refresh itab_matnr.
    BREAK-POINT.
*    调用XML模板,数据源为XML字符串,返回结果至内表
    CALL TRANSFORMATION zxml_skgj
    SOURCE XML w_xml
    RESULT itmara =  itab_matnr[].

  CATCH cx_st_error INTO lo_oref .
    CLEAR: lv_msg .
    lv_msg  = lo_oref->get_text( ) .
    WRITE: / 'Error message:',lv_msg.
ENDTRY.

ENDFORM.                    " DECOD_XML
  • 0
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值