XML文件的两种转换方法1,使用ABAP语言在程序中组织生成XML文件此方法比较繁琐,相当于一行一行的凑出XML文件里面的所有语句.优点是在各个版本的SAP系统中都可以正常工作,不受系统版本限制.如上面这个XML文件的实现方法如下:*&---------------------------------------------------------------------**&Report Z_BARRY_TEST_XML*&*&---------------------------------------------------------------------**&ECC通用*&---------------------------------------------------------------------*REPORT z_barry_test_xml.DATA:BEGINOFitab_matnrOCCURS0,“XML文件中的节点Product matnrLIKEmara-matnr, maktxLIKEmakt-maktx, ENDOFitab_matnr.DATA:BEGINOFitab_classOCCURS0,“XML文件中的节点Categorie classLIKEm_wwgha-class,"部门 kschlLIKEm_wwgha-kschl,"DESC ENDOFitab_class.DATA:l_ixmlTYPEREFTOif_ixml,“XML相关对象定义 l_encodingTYPEREFTOif_ixml_encoding,“XMLCodepage对象 l_commentTYPEREFTOif_ixml_comment,“XML注释对象 l_docTYPEREFTOif_ixml_document,“XML文件对象 l_rootTYPEREFTOif_ixml_element,“XML元素对象 l_itemTYPEREFTOif_ixml_element, l_elementTYPEREFTOif_ixml_element, l_attributeTYPEREFTOif_ixml_attribute,“XML属性 l_ostreamTYPEREFTOif_ixml_ostream, l_factory TYPEREFTOif_ixml_stream_factory.TYPES:BEGINOFxml_line, data(256)TYPEx, ENDOFxml_line.DATA:xml_tableTYPETABLEOFxml_line, xml_size TYPEi.DATA:l_rvalTYPEi.START-OF-SELECTION. PERFORMgetdata. PERFORMcreate_xml. PERFORMdownload.*---------------------------------------------------------------------** FORMgetdata **---------------------------------------------------------------------*FORMgetdata. SELECTmatnrmaktxFROMmakt INTOTABLEitab_matnr UPTO4ROWS WHEREspras='1'. SELECTclasskschlFROMm_wwgha INTOTABLEitab_class UPTO4ROWS WHEREsprasIN('1','E'). DELETEitab_classWHEREclass='0'. APPENDitab_class."演示空数据ENDFORM.*---------------------------------------------------------------------** FORMcreate_xml **---------------------------------------------------------------------*FORMcreate_xml. CLASScl_ixmlDEFINITIONLOAD. l_ixml=cl_ixml=>create(). CALLMETHODl_ixml->create_encoding“创建Codepage对象 EXPORTING byte_order =0 character_set='gb2312' RECEIVING rval =l_encoding. CALLMETHODl_ixml->create_document“创建XML文件对象 RECEIVING rval =l_doc. CALLMETHODl_doc->set_encoding“为XML文件对象定义Codepage EXPORTING encoding=l_encoding . CALLMETHODl_doc->create_simple_element“创建XML元素对象 EXPORTING name ='Root' parent =l_doc RECEIVING rval =l_root. CALLMETHODl_root->set_attribute“定义XML元素对象的数据 EXPORTING name ='ATTRIBUTE' value ='sample' RECEIVING rval =l_rval. CALLMETHOD l_doc->create_comment“添加一行注释 EXPORTING comment='''上面ATTRIBUTE为属性示例''' RECEIVING rval =l_comment . CALLMETHODl_root->append_child“添加子节点(注释行) EXPORTING new_child=l_comment RECEIVING rval =l_rval. PERFORMfill_itab2xmlTABLES itab_matnr“添加内表记录 USING 'Products' 'Product' l_root. PERFORMfill_itab2xmlTABLES itab_class“添加内表记录 USING 'Categories' 'Categorie' l_root. CALLMETHODl_ixml->create_stream_factory RECEIVING rval =l_factory . CALLMETHODl_factory->create_ostream_itable EXPORTING table =xml_table RECEIVING rval =l_ostream . CALLMETHODl_doc->render EXPORTING ostream = l_ostream recursive='X' . CALLMETHODl_ostream->get_num_written_raw RECEIVING rval =xml_size.ENDFORM.*---------------------------------------------------------------------** FORMdownload **---------------------------------------------------------------------*FORMdownload. CALLFUNCTION'GUI_DOWNLOAD' EXPORTING bin_filesize=xml_size filename ='C:\ECC6.XML' filetype ='BIN' TABLES data_tab =xml_table.ENDFORM.*---------------------------------------------------------------------** FORMfill_itab **---------------------------------------------------------------------*FORMfill_itab2xmlTABLESintab USINGnode1nameTYPEstring node2nameTYPEstring l_parentTYPEREFTOif_ixml_element. DATA:BEGINOFheadtabOCCURS0, length TYPEi, decimals TYPEi, type_kindTYPEc, name(30) TYPEc, ENDOFheadtab. DATAdescr_refTYPEREFTOcl_abap_structdescr. FIELD-SYMBOLS:
TYPEabap_compdescr, , TYPEANY. DATA:nTYPEi, strTYPEstring, itemnameTYPEstring, text1TYPEc, l_nodeTYPEREFTOif_ixml_element, l_itemTYPEREFTOif_ixml_element. descr_ref?=cl_abap_typedescr=>describe_by_data(intab). LOOPATdescr_ref->componentsASSIGNING. MOVE-CORRESPONDINGTOheadtab. APPENDheadtab. ENDLOOP. CALLMETHODl_doc->create_simple_element EXPORTING name =node1name parent =l_parent RECEIVING rval =l_node . DESCRIBETABLEheadtabLINESn. LOOPATintabASSIGNING. CALLMETHODl_doc->create_simple_element EXPORTING name =node2name parent =l_node RECEIVING rval =l_item . DOnTIMES. ASSIGNCOMPONENTsy-indexOFSTRUCTURETO. str=. READTABLEheadtabINDEXsy-index. IFheadtab-type_kind='I'ORheadtab-type_kind='P' ORheadtab-type_kind='F'. SEARCHstrFOR'-'. IFsy-subrc=0ANDsy-fdpos<>0. SPLITstrAT'-'INTOstrtext1. CONDENSEstr. CONCATENATE'-'strINTOstr. ELSE. CONDENSEstr. ENDIF. ELSE.* SHIFTstrLEFTDELETINGLEADING'0'. ENDIF. itemname=headtab-name. CALLMETHODl_doc->create_simple_element EXPORTING name =itemname parent =l_item value =str RECEIVING rval =l_element. ENDDO. ENDLOOP.ENDFORM.2,使用SAP工具Transformation(Tcode:STRANS)定义转换模板,ABAP组织数据并转换为XML格式.此方法对SAP版本有限制,只有ECC5.0以上版本才能使用.执行Tcode:STRANS,新建一个Transformation.粘贴如下代码并激活.SE38新建下面的程序转换XML文件REPORTZZITAB_XML.DATAxml_stringTYPEstring.DATA:BEGINOFline,keyTYPEi,valuesTYPETABLEOFi,ENDOFline.DATAnumTYPEi.DATAitabLIKETABLEOFline.DATAresultLIKEitab.DATA:BEGINOFit_xmlOCCURS0,line(100)TYPEc,ENDOFit_xml.DATA:w_lenTYPEi.DO3TIMES.CLEARline.line-key=sy-index+1.num=line-key**2.APPENDnumTOline-values.num=line-key**3.APPENDnumTOline-values.num=line-key**4.APPENDnumTOline-values.APPENDlineTOitab.ENDDO.CALLTRANSFORMATIONZTEST1“调用TRANSFORMATION”ZTEST1”完成转换SOURCEroot=itabRESULTXMLxml_string.“此时的XML为长字符串write:/'XML转换完毕'.CALLFUNCTION'SCMS_STRING_TO_FTEXT'“将XML为长字符串转换为内式方便下载EXPORTINGtext=xml_stringIMPORTINGlength=w_lenTABLESftext_tab=it_xml.write:/'XML格式转换完毕'.CALLFUNCTION'GUI_DOWNLOAD'“XML文件下载EXPORTINGfilename='c:\xmlcall.xml'filetype='BIN'IMPORTINGfilelength=w_lenTABLESdata_tab=it_xml.write:/'XML文件下载完毕'.*下面是将XML文件转换为内表格式*CALLTRANSFORMATIONZTEST1*SOURCEXMLxml_string*RESULTroot=result.**write:/'转换完毕'.(注:可编辑下载,若有不当之处,请指正,谢谢!)