sap系统中xml文件的两种转换方法.docx

上传人:b****6 文档编号:6121613 上传时间:2023-01-04 格式:DOCX 页数:11 大小:214.88KB
下载 相关 举报
sap系统中xml文件的两种转换方法.docx_第1页
第1页 / 共11页
sap系统中xml文件的两种转换方法.docx_第2页
第2页 / 共11页
sap系统中xml文件的两种转换方法.docx_第3页
第3页 / 共11页
sap系统中xml文件的两种转换方法.docx_第4页
第4页 / 共11页
sap系统中xml文件的两种转换方法.docx_第5页
第5页 / 共11页
点击查看更多>>
下载资源
资源描述

sap系统中xml文件的两种转换方法.docx

《sap系统中xml文件的两种转换方法.docx》由会员分享,可在线阅读,更多相关《sap系统中xml文件的两种转换方法.docx(11页珍藏版)》请在冰豆网上搜索。

sap系统中xml文件的两种转换方法.docx

sap系统中xml文件的两种转换方法

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:

\'

           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版本有限制,只有以上版本才能使用.

执行Tcode:

STRANS,新建一个Transformation.

粘贴如下代码并激活.

transformxmlns:

tt="">

rootname="ROOT"/>

template>

loopname="line"ref=".ROOT">

valueref="$"/>

loopref="$">

value/>

loop>

loop>

template>

transform>

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=itab

RESULTXMLxml_string.“此时的XML为长字符串

write:

/'XML转换完毕'.

CALLFUNCTION'SCMS_STRING_TO_FTEXT'“将XML为长字符串转换为内表格式方便下载

EXPORTING

text=xml_string

IMPORTING

length=w_len

TABLES

ftext_tab=it_xml.

write:

/'XML格式转换完毕'.

CALLFUNCTION'GUI_DOWNLOAD'“XML文件下载

EXPORTING

filename='c:

\'

filetype='BIN'

IMPORTING

filelength=w_len

TABLES

data_tab=it_xml.

write:

/'XML文件下载完毕'.

*下面是将XML文件转换为内表格式

*CALLTRANSFORMATIONZTEST1

*SOURCEXMLxml_string

*RESULTroot=result.

*

*write:

/'转换完毕'.

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 自然科学 > 数学

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1