加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

SAP 生成XML

发布时间:2020-12-16 09:34:22 所属栏目:百科 来源:网络整理
导读:REPORT ZXML_A . SET EXTENDED CHECK OFF . TYPE-POOLS : IXML . *---------------------------------------------------------------------* *ReportT_DOM_MANIPULATE * *---------------------------------------------------------------------* *showsho
REPORTZXML_A.

SETEXTENDEDCHECKOFF.

TYPE-POOLS:IXML.

*&---------------------------------------------------------------------*
*&ReportT_DOM_MANIPULATE
*&
*&---------------------------------------------------------------------*
*&showshowtomanipulateadomtree
*&---------------------------------------------------------------------*
***********************************************************
*macros

DEFINEXML.

WRITE:/'XML:',&1COLORCOL_POSITIVEINVERSE.

END-OF-DEFINITION.

*************************************************************
*globaldata
*
DATA:DOCUMENTTYPEREFTOIF_IXML_DOCUMENT,

RETTYPEI.
*************************************************************
*buildingaDOMtreefromscratch
*

START-OF-SELECTION.

*createthetree
PERFORMCREATE_DOMCHANGINGDOCUMENT.

*printthetree
ULINE.WRITE:/'DOCUMENTBEFORMANIPULATION'.

PERFORMPRINT_DOMUSINGDOCUMENT.

*renderthetree
PERFORMMANIP_DOMCHANGINGDOCUMENT.

*printthetree
ULINE.WRITE:/'DOCUMENTAFTERMANIPULATION'.

PERFORMPRINT_DOMUSINGDOCUMENT.

*renderthetree
PERFORMRENDER_DOMCHANGINGDOCUMENT.

*&---------------------------------------------------------------------*
*&Formcreate_dom
*&---------------------------------------------------------------------*
*text
*----------------------------------------------------------------------*
*<--P_DOCUMENTtext
*----------------------------------------------------------------------*

FORMCREATE_DOMCHANGINGDOCUMENTTYPEREFTOIF_IXML_DOCUMENT.

*------------------------------
*documenttocreate
*------------------------------

*<?xmlversion="1.0"?>

*<ordernumber="4711">

*<head>

*<status>confirmed</status>

*<dateformat="mm/dd/yyyy">08/15/1999</date>

*</head>

*<body>

*<itempos="10"units="2"price="17">abap-book</item>

*<itempos="20"units="1"price="10">sapr3-cdrom</item>

*<itempos="30"units="5"price="12">coffee</item>

*</body>

*</order>

*------------------------------

DATA:IXMLTYPEREFTOIF_IXML,

PARENTTYPEREFTOIF_IXML_NODE,

ELEMENTTYPEREFTOIF_IXML_ELEMENT,

NODETYPEREFTOIF_IXML_NODE,

RETTYPEI.

*createtheixmlmainfactory

IXML=CL_IXML=>CREATE().

*createaemptydocument

DOCUMENT=IXML->CREATE_DOCUMENT().

*createrootnode<order>"根节点!!!!!!!!!!

ELEMENT=DOCUMENT->CREATE_ELEMENT(NAME='order').

RET=ELEMENT->SET_ATTRIBUTE(NAME='number'VALUE='4711').

RET=DOCUMENT->APPEND_CHILD(NEW_CHILD=ELEMENT).

*remember<order>node

PARENT=ELEMENT.

*createnode<head>

ELEMENT=DOCUMENT->CREATE_ELEMENT(NAME='head').

RET=PARENT->APPEND_CHILD(NEW_CHILD=ELEMENT).

*createnode<body>

ELEMENT=DOCUMENT->CREATE_ELEMENT(NAME='body').

RET=PARENT->APPEND_CHILD(NEW_CHILD=ELEMENT).

*find<head>node

PARENT=DOCUMENT->FIND_FROM_NAME(NAME='head').

*create<status>confirmed</status>

ELEMENT=DOCUMENT->CREATE_ELEMENT(NAME='status').

RET=ELEMENT->SET_VALUE(VALUE='confirmed').

RET=PARENT->APPEND_CHILD(NEW_CHILD=ELEMENT).

*create<dateformat="mm/dd/yyyy">08/15/2001</date>

ELEMENT=DOCUMENT->CREATE_ELEMENT(NAME='date').

RET=ELEMENT->SET_ATTRIBUTE(NAME='format'VALUE='mm/dd/yyyy').

RET=ELEMENT->SET_VALUE(VALUE='08/15/2001').

RET=PARENT->APPEND_CHILD(NEW_CHILD=ELEMENT).

*find<body>node

PARENT=DOCUMENT->FIND_FROM_NAME(NAME='body').

*create<itempos="10"units="2"price="17">abap-book</item>

ELEMENT=DOCUMENT->CREATE_ELEMENT(NAME='item').

RET=ELEMENT->SET_ATTRIBUTE(NAME='pos'VALUE='10').

RET=ELEMENT->SET_ATTRIBUTE(NAME='units'VALUE='2').

RET=ELEMENT->SET_ATTRIBUTE(NAME='price'VALUE='17').

RET=ELEMENT->SET_ATTRIBUTE(NAME='st'VALUE='1').

RET=ELEMENT->SET_VALUE(VALUE='abap-book').

RET=PARENT->APPEND_CHILD(NEW_CHILD=ELEMENT).

*create<itempos="20"units="1"price="10">sapr3-cdrom</item>

ELEMENT=DOCUMENT->CREATE_ELEMENT(NAME='item').

RET=ELEMENT->SET_ATTRIBUTE(NAME='pos'VALUE='20').

RET=ELEMENT->SET_ATTRIBUTE(NAME='units'VALUE='1').

RET=ELEMENT->SET_ATTRIBUTE(NAME='price'VALUE='10').

RET=ELEMENT->SET_ATTRIBUTE(NAME='st'VALUE='2').

RET=ELEMENT->SET_VALUE(VALUE='sapr3-cdrom').

RET=PARENT->APPEND_CHILD(NEW_CHILD=ELEMENT).

*create<itempos="30"units="5"price="12">coffee</item>

ELEMENT=DOCUMENT->CREATE_ELEMENT(NAME='item').

RET=ELEMENT->SET_ATTRIBUTE(NAME='pos'VALUE='30').

RET=ELEMENT->SET_ATTRIBUTE(NAME='units'VALUE='5').

RET=ELEMENT->SET_ATTRIBUTE(NAME='price'VALUE='10').

RET=ELEMENT->SET_ATTRIBUTE(NAME='st'VALUE='3').

RET=ELEMENT->SET_VALUE(VALUE='coffee').

RET=PARENT->APPEND_CHILD(NEW_CHILD=ELEMENT).

ENDFORM."create_dom

*&---------------------------------------------------------------------*
*&Formrender_dom
*&---------------------------------------------------------------------*
*text
*----------------------------------------------------------------------*
*<--P_DOCUMENTtext
*----------------------------------------------------------------------*

FORMRENDER_DOMCHANGINGP_DOCUMENT.

*

*renderDOMintoastring

*

TYPES:C_LINE(50)TYPEC.

DATA:IXMLTYPEREFTOIF_IXML,

RENDERERTYPEREFTOIF_IXML_RENDERER,

STREAMFACTORYTYPEREFTOIF_IXML_STREAM_FACTORY,

OSTREAMTYPEREFTOIF_IXML_OSTREAM,

ENCODINGTYPEREFTOIF_IXML_ENCODING,

XMLLINETYPEC_LINE,

XMLTABTYPESTANDARDTABLEOFC_LINE,

CHARSETTYPESTRING,

SUCCESSTYPEC.

*createtheixmlmainfactory

IXML=CL_IXML=>CREATE().

*createastreamFactory

STREAMFACTORY=IXML->CREATE_STREAM_FACTORY().

*createaoutputstream

OSTREAM=STREAMFACTORY->CREATE_OSTREAM_ITABLE(TABLE=XMLTAB).

*setandocumentencoding(optional)

"charsets:utf-8,utf-16,sap*

IFNOTCHARSETISINITIAL.

ENCODING=IXML->CREATE_ENCODING(CHARACTER_SET=CHARSET

BYTE_ORDER=0).

SUCCESS=OSTREAM->SET_ENCODING(ENCODING=ENCODING).

ENDIF.

*createaxmlrenderer

RENDERER=IXML->CREATE_RENDERER(DOCUMENT=DOCUMENT

OSTREAM=OSTREAM).

*renderdocumentintooutput-stream

IFRENDERER->RENDER()<>0.

*error

WRITE:/'ERROR:documentrendering'.

EXIT.

ENDIF.

*dumpxmltable

ULINE.

WRITE:/.

WRITE:/'RENDEREDXML-DATA'.

WRITE:/.

LOOPATXMLTABINTOXMLLINE.

XMLXMLLINE.

ENDLOOP.

ENDFORM."render_dom

*---------------------------------------------------------------------*
*ORMprint_tree*
*---------------------------------------------------------------------*
*........*
*---------------------------------------------------------------------*

FORMPRINT_DOMUSINGDOCUMENTTYPEREFTOIF_IXML_DOCUMENT.

DATA:NODETYPEREFTOIF_IXML_NODE,

ITERATORTYPEREFTOIF_IXML_NODE_ITERATOR,

NODEMAPTYPEREFTOIF_IXML_NAMED_NODE_MAP,

ATTRTYPEREFTOIF_IXML_NODE,

NAMETYPESTRING,

PREFIXTYPESTRING,

VALUETYPESTRING,

INDENTTYPEI,

COUNTTYPEI,

INDEXTYPEI.

CHECKNOTDOCUMENTISINITIAL.

NODE=DOCUMENT.

ULINE.

WRITE:/.

WRITE:/'DOM-TREE'.

WRITE:/.

IFNODEISINITIAL.EXIT.ENDIF.

*createanodeiterator

ITERATOR=NODE->CREATE_ITERATOR().

*getcurrentnode

NODE=ITERATOR->GET_NEXT().

*loopoverallnodes

WHILENOTNODEISINITIAL.

INDENT=NODE->GET_HEIGHT()*2.

INDENT=INDENT+20.

CASENODE->GET_TYPE().

WHENIF_IXML_NODE=>CO_NODE_ELEMENT.

*elementnode

NAME=NODE->GET_NAME().

NODEMAP=NODE->GET_ATTRIBUTES().

WRITE:/'ELEMENT:'.

WRITE:ATINDENTNAMECOLORCOL_POSITIVEINVERSE.

IFNOTNODEMAPISINITIAL.

*attributes

COUNT=NODEMAP->GET_LENGTH().

DOCOUNTTIMES.

INDEX=SY-INDEX-1.

ATTR=NODEMAP->GET_ITEM(INDEX).

NAME=ATTR->GET_NAME().

PREFIX=ATTR->GET_NAMESPACE().

VALUE=ATTR->GET_VALUE().

WRITE:/'ATTRIBUTE:'.

WRITE:ATINDENTNAMECOLORCOL_HEADINGINVERSE,'=',

VALUECOLORCOL_TOTALINVERSE.

ENDDO.

ENDIF.

WHENIF_IXML_NODE=>CO_NODE_TEXTOR

IF_IXML_NODE=>CO_NODE_CDATA_SECTION.

*textnode

VALUE=NODE->GET_VALUE().

WRITE:/'TEXT:'.

WRITE:ATINDENTVALUECOLORCOL_GROUPINVERSE.

ENDCASE.

*advancetonextnode

NODE=ITERATOR->GET_NEXT().

ENDWHILE.

ENDFORM."traverse_dom

*&---------------------------------------------------------------------*
*&Formdisplay_dom
*&---------------------------------------------------------------------*
*text
*----------------------------------------------------------------------*
*-->P_DOCUMENTtext
*----------------------------------------------------------------------*

FORMDISPLAY_DOMUSINGDOCUMENTTYPEREFTOIF_IXML_DOCUMENT

TITELLIKESY-TITLE.

*displaydocument

CALLFUNCTION'SDIXML_DOM_TO_SCREEN'
EXPORTING
DOCUMENT=DOCUMENT
TITLE=TITEL.

ENDFORM."display_dom

*&---------------------------------------------------------------------*
*&Formmanip_dom
*&---------------------------------------------------------------------*
*text
*----------------------------------------------------------------------*
*<--P_DOCUMENTtext
*----------------------------------------------------------------------*

FORMMANIP_DOMCHANGINGDOCUMENTTYPEREFTOIF_IXML_DOCUMENT.

*------------------------------

*documentnowlookslike

*------------------------------

*<?xmlversion="1.0"?>

*<ordernumber="4711">

*<head>

*<status>confirmed</status>

*<dateformat="mm/dd/yyyy">08/15/1999</date>

*</head>

*<body>

*<itempos="10"units="2"price="17">abap-book</item>

*<itempos="20"units="1"price="10">sapr3-cdrom</item>

*<itempos="30"units="5"price="12">coffee</item>

*</body>

*</order>

*------------------------------

DATA:ORDERTYPEREFTOIF_IXML_ELEMENT,

HEADTYPEREFTOIF_IXML_ELEMENT,

BODYTYPEREFTOIF_IXML_ELEMENT,

STATUSTYPEREFTOIF_IXML_ELEMENT,

DATETYPEREFTOIF_IXML_ELEMENT.

*usingthemethodfind_from_name

ORDER=DOCUMENT->FIND_FROM_NAME(NAME='order').

HEAD=DOCUMENT->FIND_FROM_NAME(NAME='head').

BODY=DOCUMENT->FIND_FROM_NAME(NAME='body').

STATUS=DOCUMENT->FIND_FROM_NAME(NAME='status').

DATE=DOCUMENT->FIND_FROM_NAME(NAME='date').

*update<order>

DATA:OLDTYPESTRING.

OLD=ORDER->GET_ATTRIBUTE(NAME='number')."old=4711

RET=ORDER->SET_ATTRIBUTE(NAME='赵博良'VALUE='001')."ret=0

*update<date>

RET=DATE->SET_ATTRIBUTE(NAME='format'VALUE='mm-dd-yyyy').

RET=DATE->SET_VALUE(VALUE='12-01-2000').

*update<item>

DATA:ITEMSTYPEREFTOIF_IXML_NODE_COLLECTION,

ITEMTYPEREFTOIF_IXML_ELEMENT,

VALTYPESTRING,

IDXTYPEI,

LENTYPEI.

ITEMS=BODY->GET_ELEMENTS_BY_TAG_NAME(NAME='item').

LEN=ITEMS->GET_LENGTH().

DOLENTIMES.

*getitem

IDX=SY-INDEX-1.

IFSY-SAPRL>='610'."gui的版本???????

*REL>=6.10:weusesimplecast

ITEM?=ITEMS->GET_ITEM(INDEX=IDX).

ELSE.

*REL<6.10:explicitquery_interfaceisrequired

NODE=ITEMS->GET_ITEM(INDEX=IDX).

ITEM?=NODE->QUERY_INTERFACE(IID=IXML_IID_ELEMENT).

ENDIF.

*changepos

VAL=SY-INDEX.

RET=ITEM->SET_ATTRIBUTE(NAME='pos'VALUE=VAL).

*removeattrst='X'

RET=ITEM->REMOVE_ATTRIBUTE(NAME='st')."删除了st节点

*addattrln='X'

RET=ITEM->SET_ATTRIBUTE(NAME='idx'VALUE=VAL).

ENDDO.

*------------------------------

*documentnowlookslike

*------------------------------

*<?xmlversion="1.0"?>

*<ordernumber="4711"type="001">

*<head>

*<status>confirmed</status>

*<dateformat="mm-dd-yyyy">12-01-2000</date>

*</head>

*<body>

*<itempos="1"units="2"price="17"idx="1">abap-book</item>

*<itempos="2"units="1"price="10"idx="2">sapr3-cdrom</item>

*<itempos="3"units="5"price="10"idx="3">coffee</item>

*</body>

*</order>

*------------------------------

ENDFORM."manip_dom



http://blog.csdn.net/wren2004/archive/2010/03/11/5369325.aspx

http://zbl.0201.blog.163.com/blog/static/66203766200862013550673/

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读