[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Parse innerxml in base64 format



Hi Scott,
 
I am trying to parse a xml file where a tag contains base64 data (a test tif file).
Can I use the approach in GetInnerDoc to decode the base64 data and write to the ifs file?
 
Seems like I get "rubbish" in the ifs file when i use base64_decode.
And I get base64 data when i skip the base64_decode.
Do I have to use iconv to convert the data before I use base64_decode?
 
 
   Begsr ParseContent;                                            
                                                                  
   http_xmlReturnPtr(*ON);                                        
   filename = http_tempfile() + '.xml';                           
                                                                  
   // Note:  http_XmlStripCRLF(*ON/*OFF) controls whether or not  
   //        the XML parser removes CR and LF characters from the 
   //        Xml data that's passed to your 'Incoming' procedure. 
                                                                  
   http_XmlStripCRLF(*ON);                                        
   rc = http_parse_xml_stmf(%trim(Ma_xml)                         
                     : HTTP_XML_CALC     
                     : *null                        
                     : %paddr(GetInnerDoc)          
                     : %addr(filename));            
                                                    
   if (rc <> 1);                                    
     http_crash();                                  
   endif;                                           
   ma_content = filename;                           
                                                    
   Endsr;                                           
                         
I use the GetInnerDoc subroutine.
 
P GetInnerDoc     B                   export                    
D GetInnerDoc     PI                                            
D   filename                    50a   varying                   
D   depth                       10I 0 value                     
D   name                      1024A   varying const             
D   path                     24576A   varying const             
D   value                             likeds(Element_Val_t)     
D   Attrs                         *   dim(32767)                
D                                     const options(*varsize)   
D fd              s             10i 0                           
D fd3             s             10I 0                           
D len             s             10I 0                           
D buf             s          32768A                             
D outbuf          S          24576A                             
D outlen          S             10I 0                           
                                                                
 /free    

   if path = '/soapenv:Envelope/soapenv:Body/'             
           + 'rs:getContentResponse';                      
     if (name = 'content:content');                        
       fd = open( filename                                 
                 : O_CREAT + O_TRUNC + O_WRONLY + O_CCSID  
                   + O_TEXTDATA + O_TEXT_CREAT             
                 : S_IRUSR + S_IWUSR                       
                 : 819                                     
                 : 0 );                                    
       // FIXME: Add error handling.                       
                                                           
       outlen = base64_decode( value.buf                   
                 : value.len                               
                 : %addr(outbuf)                           
                 : %size(outbuf) );                        
                                                           
       callp write(fd: %addr(outbuf): outlen);             

       callp close(fd);  
     endif;              
   endif;                
 /end-free               
P                 E                                                            

The entire program and the xml file is enclosed in the zip file.

Best regards,

Magne

 

 
 
 

<<winmail.dat>>

-----------------------------------------------------------------------
This is the FTPAPI mailing list.  To unsubscribe, please go to:
http://www.scottklement.com/mailman/listinfo/ftpapi
-----------------------------------------------------------------------