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.