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.

猜你喜欢

转载自blog.csdn.net/ABAPNeverGiveUP/article/details/90068625