XML与ABAP数据的相互转换

DATA转换成XML方法

(注意如果数据的值与数据类型不匹配会dump)

FUNCTION YMCAFG_DATA2XML.
*"----------------------------------------------------------------------
*"*"本地接口:
*"  IMPORTING
*"     REFERENCE(I_DATA)
*"     REFERENCE(NO_INIT_ELEMENT) TYPE  CHAR1 DEFAULT ''
*"  EXPORTING
*"     REFERENCE(E_XML)
*"     REFERENCE(ES_RETMESS) TYPE  YMSRETMESS
*"----------------------------------------------------------------------
  DATA: LC_XML TYPE REF TO CL_XML_DOCUMENT.

  YMCL_CA_XML_CONTORL=>NO_INIT_ELEMENT = NO_INIT_ELEMENT.




*-->ML封装
  CREATE OBJECT LC_XML.
  CALL METHOD LC_XML->SET_DATA
    EXPORTING
      DATAOBJECT = I_DATA
    RECEIVING
      RETCODE    = ES_RETMESS-RC.
  IF ES_RETMESS-RC <> 0.
    MESSAGE S007(YMCA) INTO ES_RETMESS-MESSAGE.
    RETURN.
  ENDIF.

  CALL METHOD LC_XML->RENDER_2_STRING
    EXPORTING
      PRETTY_PRINT = 'X'
    IMPORTING
      RETCODE      = ES_RETMESS-RC
      STREAM       = E_XML.
  IF ES_RETMESS-RC <> 0.
    MESSAGE S007(YMCA) INTO ES_RETMESS-MESSAGE.
    RETURN.
  ENDIF.


  CLEAR YMCL_CA_XML_CONTORL=>NO_INIT_ELEMENT.
ENDFUNCTION.

XML转换成数据

FUNCTION ymcafg_xml2data.
*"----------------------------------------------------------------------
*"*"Local interface:
*"  IMPORTING
*"     VALUE(INPUT) TYPE  STRING
*"  EXPORTING
*"     VALUE(ES_RETMESS) TYPE  YMSRETMESS
*"  TABLES
*"      T_DATA
*"----------------------------------------------------------------------
  DATA: lc_xml TYPE REF TO cl_xml_document.

  IF input IS INITIAL.
    es_retmess-rc = 0.
    RETURN.
  ENDIF.

***>解析XML
  CREATE OBJECT lc_xml.
  CALL METHOD lc_xml->parse_string
    EXPORTING
      stream  = input
    RECEIVING
      retcode = es_retmess-rc.
  IF es_retmess-rc <> 0.
    MESSAGE s006(ymca) INTO es_retmess-message.     "XML解析失败
    RETURN.
  ENDIF.

  CALL METHOD lc_xml->get_data
    CHANGING
      dataobject = t_data[].


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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值