midrange.com code scratchpad
Name:
Rick Chevalier
Scriptlanguage:
Plain Text
Tabwidth:
4
Date:
10/05/2011 08:05:57 pm
IP:
Logged
Description:
outXMLDocument procedure
Code:
  1.      P outXMLDocument  B                   export
  2.      ‚*
  3.      d outXMLDocument  PI         32767a
  4.      d  DOMNODE@                       *   value
  5.      ‚*
  6.      d rtnValue        s          32767a   inz                                  Library name
  7.      ‚*
  8.      doString          S            132a   inz
  9.      dDOMChild@        S               *
  10.      dSaveChild@       S               *
  11.      dNodeName@        S               *
  12.      dNodeVal@         S               *
  13.      dAttrName2@       S               *
  14.      dAttrVal2@        S               *
  15.      dNodeMap@         S               *
  16.      dAttrName2C       S            132a
  17.      dAttrName2C@      S               *   inz(%addr(AttrName2C))
  18.      dAttrVal2C        S            132a
  19.      dAttrVal2C@       S               *   inz(%addr(AttrVal2C))
  20.      dNodeType         S              5i 0
  21.      dattrlen          S             10i 0
  22.      distrue           S             10i 0
  23.      dsaveattrl        S             10i 0
  24.      dOUTSTRING        S            132a
  25.      dOUTSTRING@       S               *   inz(%addr(OUTSTRING))
  26.      dOUTSTRING2       S            132a
  27.      dOUTSTRING2@      S               *   inz(%addr(OUTSTRING2))
  28.      dBytesprov        S             10i 0 inz(132)
  29.      dBytesavail       S             10i 0 inz(0)
  30.      dByteprov@        S               *   inz(%addr(Bytesprov))
  31.      dByteavail@       S               *   inz(%addr(Bytesavail))
  32.      dIndex            S             10i 0 inz(0)
  33.      ‚*
  34.       /free
  35.  
  36.           //‚specify the DOM Node name, value, and type
  37.           NodeName@ = QxmlDOMNode_getNodeName(DOMNODE@);
  38.           NodeVal@  = QxmlDOMNode_getNodeValue(DOMNODE@);
  39.           NodeType  = QxmlDOMNode_getNodeType(DOMNODE@);
  40.           //‚retrive the transcode name and value from xmlstring
  41.           QxmlTRANSCODE(NodeName@: qxml_UNICODE: OUTSTRING@:
  42.                         ByteProv@: ByteAvail@: Qxml_CCSID37);
  43.           if NodeVal@ <> *NULL;
  44.             QxmlTRANSCODE(NodeVal@: qxml_UNICODE: OUTSTRING2@:
  45.                           ByteProv@: ByteAvail@: Qxml_CCSID37);
  46.           endif;
  47.           //‚process depending upon node type
  48.           select;
  49.             //‚when Node TYPE is TEXT_NODE
  50.             when NodeType =Qxml_TEXT_NOD;
  51.               oString=%str(OUTSTRING2@);
  52.               bldDetail(oString);
  53.             //‚when Node TYPE is Processing Instruction
  54.             when NodeType = Qxml_PI_NOD;
  55.               oString = '<?' +  %str(OUTSTRING@) + ' ' +
  56.                           %str(OUTSTRING2@)+'?>';
  57.               bldDetail(oString);
  58.             //‚when Node TYPE is Document - print child nodes
  59.             when NodeType = Qxml_DOC_NOD;
  60.               oString = '<?xml version="1.0" ?>';
  61.               bldDetail(oString);
  62.               DOMChild@=QxmlDOMNode_getFirstChild( DOMNODE@ );
  63.               dow (QxmlDOMNODE_ISNULL(DomChild@) = Qxml_NODNOTNUL);
  64.                 outXMLDocument(DOMChild@);
  65.                 SaveChild@=DOMChild@;
  66.                 DOMChild@=QxmlDOMNODE_GETNEXTSIBLING( DOMChild@ );
  67.                 QxmlDOMNODE_delete( SaveChild@ );
  68.               enddo;
  69.               QxmlDOMNODE_delete( DOMChild@ );
  70.             //‚when Node TYPE is Element - print child nodes
  71.             when NodeType = Qxml_ELMNT_NOD;
  72.               //‚determine if element node has any attributes
  73.               NodeMap@=QxmlDOMNode_getAttributes( DOMNODE@ );
  74.               attrlen=QxmlDOMNamedNodeMap_getLength( NodeMap@ );
  75.               saveattrl = attrlen;
  76.               if attrlen > *zero;
  77.                 oString = '<' +  %str( OUTSTRING@ );
  78.                 bldDetail(oString);
  79.               endif;
  80.               //‚do while there are attributes "name-value" pairs
  81.               dow attrlen > *zero;
  82.                 DOMChild@  = QxmlDOMNamedNodeMap_item( NodeMap@ : index );
  83.                 AttrName2@ = QxmlDOMNODE_getNodeName( DOMChild@ );
  84.                 //‚transcode name and value to char string from XML
  85.                 QxmlTRANSCODE(AttrName2@: qxml_UNICODE: AttrName2C@:
  86.                               ByteProv@: ByteAvail@: Qxml_CCSID37);
  87.                 AttrVal2@ =QxmlDOMNode_getNodeValue(DOMChild@);
  88.                 //‚ #689  - Start
  89.                 //‚Clear buffer value
  90.                 Eval AttrVal2C = *blank;
  91.                 //‚ #689  - End
  92.                 //‚transcode name and value to char string from XML
  93.                 QxmlTRANSCODE(AttrVal2@: qxml_UNICODE: AttrVal2C@:
  94.                               ByteProv@: ByteAvail@: Qxml_CCSID37);
  95.                 //‚ #689  - Start
  96.                 // if attrlen = 1;
  97.                 //   oString =' '+ %str(AttrName2C@) +'="' +
  98.                 //            %str(AttrVal2C@) +'">';
  99.                 // else;
  100.                 //  oSTring =' '+ %str(AttrName2C@) +'="' +
  101.                 //           %str(AttrVal2C@)+'"';
  102.                 // endif;
  103.                 Select;
  104.                   //‚When last tag
  105.                   When attrlen = 1;
  106.                     If AttrVal2C = *blank;
  107.                      oString = ' ' + %str(AttrName2C@) + '=" ">';
  108.                     Else;
  109.                      oString = ' ' + %str(AttrName2C@) + '="'  +
  110.                               %str(AttrVal2C@) + '">';
  111.                     Endif;
  112.                   Other;
  113.                     If AttrVal2C = *blank;
  114.                        oSTring = ' ' + %str(AttrName2C@) + '=" "';
  115.                     Else;
  116.                        oSTring = ' ' + %str(AttrName2C@) + '="' +
  117.                                  %str(AttrVal2C@) + '"';
  118.                     Endif;
  119.                 EndSl;
  120.                 //‚ #689  - End
  121.  
  122.                 QxmlDOMNode_delete(DOMChild@);
  123.             //  bldDetail(oString);
  124.                 bldDetailSp(oString);
  125.                 index += 1;
  126.                 attrlen -= 1;
  127.               enddo;
  128.               QxmlDOMNamedNodeMap_delete(NodeMap@);
  129.               //‚process children of node
  130.               DOMChild@=QxmlDOMNode_getFirstChild(DOMNODE@);
  131.               if (QxmlDOMNode_isNull(DomChild@)= Qxml_NODNOTNUL) AND
  132.                  saveattrl = *zero;
  133.                 oString = '<'+ %str(OUTSTRING@)+'>';
  134.                 bldDetail(oString);
  135.               else;
  136.                 if saveattrl = *zero;
  137.                   oSTring = '<'+%str(OUTSTRING@)+'/>';
  138.                   bldDetail(oString);
  139.                 endif;
  140.               endif;
  141.               if (QxmlDOMNODE_ISNULL(DomChild@) = Qxml_NODNOTNUL);
  142.                 //‚Do while there are child nodes
  143.                 dow (QxmlDOMNODE_ISNULL(DomChild@)=Qxml_NODNOTNUL);
  144.                   outXMLDocument(DOMChild@);
  145.                   SaveChild@=DOMChild@;
  146.                   DOMChild@=QxmlDOMNode_getNextSibling(DOMChild@);
  147.                   QxmlDOMNode_delete(SaveChild@);
  148.                 enddo;
  149.                 QxmlDOMNODE_delete(DOMChild@);
  150.                 oSTring = '</' + %str(OUTSTRING@) + '>';
  151.                 bldDetail(oString);
  152.               else;
  153.                 QxmlDOMNODE_delete(DOMChild@);
  154.                 oString = '</' +  %str( OUTSTRING@ ) + '>';
  155.             //‚ oString = '/>';
  156.                 bldDetail(oString);
  157.               endif;
  158.           endsl;
  159.  
  160.           return myString;
  161.  
  162.       /end-free
  163.      ‚*
  164.      p outXMLDocument  e 
© 2004-2019 by midrange.com generated in 0.012s valid xhtml & css