[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: Parse innerxml in base64 format
Hi Magne,
Most likely the result of base64_decode() is already in ASCII. (Or
Unicode?) Unfortunately, the parameters you specified to the open() API
have requested that OS/400 run your data through an EBCDIC->ASCII
translation table before writing it.
The result will most likely be garbage, as you've noted.
Try making your open() statement look like this:
unlink(filename);
fd = open( filename
: O_CREAT + O_WRONLY + O_CCSID
: S_IRUSR + S_IWUSR
: 819 );
In this case, the CCSID is 819, and that assumes that the data (BEFORE
it was base64 encoded on the other end) is the ISO-8859-1 variant of
ASCII. If it's something else, please change the CCSID accordingly.
Magne Kofoed wrote:
> 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
>
-----------------------------------------------------------------------
This is the FTPAPI mailing list. To unsubscribe, please go to:
http://www.scottklement.com/mailman/listinfo/ftpapi
-----------------------------------------------------------------------