P outXMLDocument B export * d outXMLDocument PI 32767a d DOMNODE@ * value * d rtnValue s 32767a inz Library name * doString S 132a inz dDOMChild@ S * dSaveChild@ S * dNodeName@ S * dNodeVal@ S * dAttrName2@ S * dAttrVal2@ S * dNodeMap@ S * dAttrName2C S 132a dAttrName2C@ S * inz(%addr(AttrName2C)) dAttrVal2C S 132a dAttrVal2C@ S * inz(%addr(AttrVal2C)) dNodeType S 5i 0 dattrlen S 10i 0 distrue S 10i 0 dsaveattrl S 10i 0 dOUTSTRING S 132a dOUTSTRING@ S * inz(%addr(OUTSTRING)) dOUTSTRING2 S 132a dOUTSTRING2@ S * inz(%addr(OUTSTRING2)) dBytesprov S 10i 0 inz(132) dBytesavail S 10i 0 inz(0) dByteprov@ S * inz(%addr(Bytesprov)) dByteavail@ S * inz(%addr(Bytesavail)) dIndex S 10i 0 inz(0) * /free //specify the DOM Node name, value, and type NodeName@ = QxmlDOMNode_getNodeName(DOMNODE@); NodeVal@ = QxmlDOMNode_getNodeValue(DOMNODE@); NodeType = QxmlDOMNode_getNodeType(DOMNODE@); //retrive the transcode name and value from xmlstring QxmlTRANSCODE(NodeName@: qxml_UNICODE: OUTSTRING@: ByteProv@: ByteAvail@: Qxml_CCSID37); if NodeVal@ <> *NULL; QxmlTRANSCODE(NodeVal@: qxml_UNICODE: OUTSTRING2@: ByteProv@: ByteAvail@: Qxml_CCSID37); endif; //process depending upon node type select; //when Node TYPE is TEXT_NODE when NodeType =Qxml_TEXT_NOD; oString=%str(OUTSTRING2@); bldDetail(oString); //when Node TYPE is Processing Instruction when NodeType = Qxml_PI_NOD; oString = '<?' + %str(OUTSTRING@) + ' ' + %str(OUTSTRING2@)+'?>'; bldDetail(oString); //when Node TYPE is Document - print child nodes when NodeType = Qxml_DOC_NOD; oString = '<?xml version="1.0" ?>'; bldDetail(oString); DOMChild@=QxmlDOMNode_getFirstChild( DOMNODE@ ); dow (QxmlDOMNODE_ISNULL(DomChild@) = Qxml_NODNOTNUL); outXMLDocument(DOMChild@); SaveChild@=DOMChild@; DOMChild@=QxmlDOMNODE_GETNEXTSIBLING( DOMChild@ ); QxmlDOMNODE_delete( SaveChild@ ); enddo; QxmlDOMNODE_delete( DOMChild@ ); //when Node TYPE is Element - print child nodes when NodeType = Qxml_ELMNT_NOD; //determine if element node has any attributes NodeMap@=QxmlDOMNode_getAttributes( DOMNODE@ ); attrlen=QxmlDOMNamedNodeMap_getLength( NodeMap@ ); saveattrl = attrlen; if attrlen > *zero; oString = '<' + %str( OUTSTRING@ ); bldDetail(oString); endif; //do while there are attributes "name-value" pairs dow attrlen > *zero; DOMChild@ = QxmlDOMNamedNodeMap_item( NodeMap@ : index ); AttrName2@ = QxmlDOMNODE_getNodeName( DOMChild@ ); //transcode name and value to char string from XML QxmlTRANSCODE(AttrName2@: qxml_UNICODE: AttrName2C@: ByteProv@: ByteAvail@: Qxml_CCSID37); AttrVal2@ =QxmlDOMNode_getNodeValue(DOMChild@); // #689 - Start //Clear buffer value Eval AttrVal2C = *blank; // #689 - End //transcode name and value to char string from XML QxmlTRANSCODE(AttrVal2@: qxml_UNICODE: AttrVal2C@: ByteProv@: ByteAvail@: Qxml_CCSID37); // #689 - Start // if attrlen = 1; // oString =' '+ %str(AttrName2C@) +'="' + // %str(AttrVal2C@) +'">'; // else; // oSTring =' '+ %str(AttrName2C@) +'="' + // %str(AttrVal2C@)+'"'; // endif; Select; //When last tag When attrlen = 1; If AttrVal2C = *blank; oString = ' ' + %str(AttrName2C@) + '=" ">'; Else; oString = ' ' + %str(AttrName2C@) + '="' + %str(AttrVal2C@) + '">'; Endif; Other; If AttrVal2C = *blank; oSTring = ' ' + %str(AttrName2C@) + '=" "'; Else; oSTring = ' ' + %str(AttrName2C@) + '="' + %str(AttrVal2C@) + '"'; Endif; EndSl; // #689 - End QxmlDOMNode_delete(DOMChild@); // bldDetail(oString); bldDetailSp(oString); index += 1; attrlen -= 1; enddo; QxmlDOMNamedNodeMap_delete(NodeMap@); //process children of node DOMChild@=QxmlDOMNode_getFirstChild(DOMNODE@); if (QxmlDOMNode_isNull(DomChild@)= Qxml_NODNOTNUL) AND saveattrl = *zero; oString = '<'+ %str(OUTSTRING@)+'>'; bldDetail(oString); else; if saveattrl = *zero; oSTring = '<'+%str(OUTSTRING@)+'/>'; bldDetail(oString); endif; endif; if (QxmlDOMNODE_ISNULL(DomChild@) = Qxml_NODNOTNUL); //Do while there are child nodes dow (QxmlDOMNODE_ISNULL(DomChild@)=Qxml_NODNOTNUL); outXMLDocument(DOMChild@); SaveChild@=DOMChild@; DOMChild@=QxmlDOMNode_getNextSibling(DOMChild@); QxmlDOMNode_delete(SaveChild@); enddo; QxmlDOMNODE_delete(DOMChild@); oSTring = '</' + %str(OUTSTRING@) + '>'; bldDetail(oString); else; QxmlDOMNODE_delete(DOMChild@); oString = '</' + %str( OUTSTRING@ ) + '>'; // oString = '/>'; bldDetail(oString); endif; endsl; return myString; /end-free * p outXMLDocument e