REPORT Y_XB_TEST10. *&---------------------------------------------------------------------* *&聲明及定義部分 *&---------------------------------------------------------------------* TYPE-POOLS: IXML. ****聲明存放XML文件的結構 TYPES:BEGIN OF XML_LINE, DATA(256) TYPE X, END OF XML_LINE. ****聲明對象 DATA: L_IXML TYPE REF TO IF_IXML, L_STREAMFACTORY TYPE REF TO IF_IXML_STREAM_FACTORY, L_OSTREAM TYPE REF TO IF_IXML_OSTREAM, L_RENDERER TYPE REF TO IF_IXML_RENDERER, L_DOCUMENT TYPE REF TO IF_IXML_DOCUMENT. ****聲明XML元素 DATA:L_ELEMENT_INPOT TYPE REF TO IF_IXML_ELEMENT, L_ELEMENT_CARRID TYPE REF TO IF_IXML_ELEMENT, L_ELEMENT_CONNID TYPE REF TO IF_IXML_ELEMENT, L_ELEMENT_CITYFROM TYPE REF TO IF_IXML_ELEMENT, L_ELEMENT_AIRPFROM TYPE REF TO IF_IXML_ELEMENT, L_ELEMENT_CITYTO TYPE REF TO IF_IXML_ELEMENT, L_ELEMENT_AIRPTO TYPE REF TO IF_IXML_ELEMENT, L_VALUE TYPE STRING. ****聲明存放XML文件的內表以及字節數 DATA: L_XML_TABLE TYPE TABLE OF XML_LINE, L_XML_SIZE TYPE I, L_RC TYPE I, FLAG TYPE STRING. ****聲明數據內表 DATA:BEGIN OF I_DATA OCCURS 0, CARRID TYPE SPFLI-CARRID, "航線代碼 CONNID TYPE SPFLI-CONNID, "航班連接編號 CITYFROM TYPE SPFLI-CITYFROM, "起飛城市 AIRPFROM TYPE SPFLI-AIRPFROM, "始發機場 CITYTO TYPE SPFLI-CITYTO, "到達城市 AIRPTO TYPE SPFLI-AIRPTO, "目標機場 END OF I_DATA. *&---------------------------------------------------------------------* *& 主邏輯部分 *&---------------------------------------------------------------------* START-OF-SELECTION. PERFORM ZFORM_GET_DATA. PERFORM ZFORM_SAVE_XML. *&---------------------------------------------------------------------* *& FORM定義部分 *&---------------------------------------------------------------------* *&---------------------------------------------------------------------* *& Form zform_get_data *&---------------------------------------------------------------------* * text *----------------------------------------------------------------------* FORM ZFORM_GET_DATA. SELECT CARRID CONNID CITYFROM AIRPFROM CITYTO AIRPTO INTO TABLE I_DATA FROM SPFLI UP TO 10 ROWS. ENDFORM. "zform_get_data *&---------------------------------------------------------------------* *& Form save_xml *&---------------------------------------------------------------------* * text *----------------------------------------------------------------------* FORM ZFORM_SAVE_XML. LOOP AT I_DATA. ****創建一個XML容器 AT FIRST. L_IXML = CL_IXML=>CREATE( ). ****創建一個文檔對象模型 L_DOCUMENT = L_IXML->CREATE_DOCUMENT( ). ****填充根節點 L_ELEMENT_INPOT = L_DOCUMENT->CREATE_SIMPLE_ELEMENT( NAME = 'INPOT' PARENT = L_DOCUMENT ). ENDAT. AT NEW CARRID. ****填充子節點(航線代碼) L_VALUE = I_DATA-CARRID. L_ELEMENT_CARRID = L_DOCUMENT->CREATE_SIMPLE_ELEMENT( NAME = 'CARRID' VALUE = L_VALUE PARENT = L_ELEMENT_INPOT ). FLAG = FLAG + 1. L_RC = L_ELEMENT_CARRID->SET_ATTRIBUTE( NAME = 'ID' VALUE = FLAG ). ENDAT. *****填充子節點(航班連接編號) AT NEW CONNID. L_VALUE = I_DATA-CONNID. L_ELEMENT_CONNID = L_DOCUMENT->CREATE_SIMPLE_ELEMENT( NAME = 'PRUEFLOS' VALUE = L_VALUE PARENT = L_ELEMENT_CARRID ). ENDAT. *****填充子節點(細節) L_VALUE = I_DATA-CITYFROM. "起飛城市 L_ELEMENT_CITYFROM = L_DOCUMENT->CREATE_SIMPLE_ELEMENT( NAME = 'CITYFROM' VALUE = L_VALUE PARENT = L_ELEMENT_CONNID ). L_VALUE = I_DATA-AIRPFROM. "始發機場 L_ELEMENT_AIRPFROM = L_DOCUMENT->CREATE_SIMPLE_ELEMENT( NAME = 'AIRPFROM' VALUE = L_VALUE PARENT = L_ELEMENT_CONNID ). L_VALUE = I_DATA-CITYTO. "到達城市 L_ELEMENT_CITYTO = L_DOCUMENT->CREATE_SIMPLE_ELEMENT( NAME = 'CITYTO' VALUE = L_VALUE PARENT = L_ELEMENT_CONNID ). L_VALUE = I_DATA-AIRPTO. "始發機場 L_ELEMENT_AIRPTO = L_DOCUMENT->CREATE_SIMPLE_ELEMENT( NAME = '目標機場' VALUE = L_VALUE PARENT = L_ELEMENT_CONNID ). ENDLOOP. ****創建一個流容器 L_STREAMFACTORY = L_IXML->CREATE_STREAM_FACTORY( ). ****連接內部XML表到流容器 L_OSTREAM = L_STREAMFACTORY->CREATE_OSTREAM_ITABLE( TABLE = L_XML_TABLE ). ****遞交XML文檔 L_RENDERER = L_IXML->CREATE_RENDERER( OSTREAM = L_OSTREAM DOCUMENT = L_DOCUMENT ). L_RC = L_RENDERER->RENDER( ). ****保存XML文檔 L_XML_SIZE = L_OSTREAM->GET_NUM_WRITTEN_RAW( ). * CALL METHOD cl_gui_frontend_services=>gui_download * EXPORTING * bin_filesize = l_xml_size * filename = 'c:\temp\INPOT.xml' * filetype = 'BIN' * CHANGING * data_tab = l_xml_table * EXCEPTIONS * OTHERS = 24. * IF sy-subrc = 0. * MESSAGE 'XML文件保存成功!!!!' TYPE 'I'. * STOP. * ENDIF. *將XML轉換成字符串 DATA: W_STRING TYPE XSTRING. DATA LS_XML TYPE STRING. **將XML轉換成字符串 * call function 'SDIXML_DOM_TO_XML' * exporting * DOCUMENT = L_DOCUMENT * importing * XML_AS_STRING = W_STRING * SIZE = L_XML_SIZE * tables * XML_AS_TABLE = L_XML_TABLE * exceptions * NO_DOCUMENT = 1 * others = 2. * if SY-SUBRC <> 0. ** MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO ** WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4. * endif. * LS_XML為轉換出來的XML CALL FUNCTION 'SCMS_BINARY_TO_STRING' EXPORTING INPUT_LENGTH = L_XML_SIZE IMPORTING TEXT_BUFFER = LS_XML TABLES BINARY_TAB = L_XML_TABLE EXCEPTIONS FAILED = 1 OTHERS = 2. IF SY-SUBRC <> 0. * MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO * WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4. ENDIF. ENDFORM. "save_xml