SAP 生成XML
发布时间:2020-12-15 22:26:07 所属栏目:百科 来源:网络整理
导读: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/ (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |