Read CLOB from xml into Dataset / Temp-Table

Posted by Johan Vergeer on 27-Oct-2017 08:55

Hi everyone,

I'm trying to read some CLOB / LONGCHAR data from an XML file into a temp-table.

<?xml version="1.0" encoding="UTF-8"?>
<label>
    <labelID>1</labelID>
    <labelType>SHIPLABEL</labelType>
    <labelFormat>ZPL</labelFormat>
    <supplementaryLabel>false</supplementaryLabel>
    <labelContent type="base64">
        CgpeRlggU2hpcG1lbnQgSUQgICAgIDogJ
    </labelContent>
</label>

DEF TEMP-TABLE ttLabel NO-UNDO
    XML-NODE-NAME "label"
    FIELD labelID            AS INT     XML-NODE-TYPE "ATTRIBUTE"
    FIELD labelType          AS CHAR    XML-NODE-TYPE "ATTRIBUTE"
    FIELD labelFormat        AS CHAR    XML-NODE-TYPE "ATTRIBUTE"
    FIELD supplementaryLabel AS LOGICAL XML-NODE-TYPE "ATTRIBUTE"
    FIELD labelContent       AS CLOB    XML-NODE-TYPE "TEXT" XML-DATA-TYPE "base64Binary" COLUMN-CODEPAGE "UTF-8".

Now the file is read into the temp-table

TEMP-TABL ttMessage:READ-XML ("FILE", cMessage, "EMPTY", ?, ?, ?, "IGNORE").

The result for ttMessage.labelContent is a file named labelContent!UTF-8!1148_1.blb. This file only contains one return.

How can I read the contents of the base64 file from the XML using a TEMP-TABLE?

All Replies

Posted by PeterWokke on 27-Oct-2017 09:10

Hi Johan,

I have used this to get images from an XML and save them to files.

                    when "DigitalImageBinaryObject" then do:

                        /*

                        cMimeCode = hXImageLine:get-attribute ("mimeCode").

                        cFileName = hXImageLine:get-attribute ("fileName").

                        iEncoding = integer(hXImageLine:get-attribute ("encodingCode")).

                        */

                        hXImageLine:get-child (hXtext,1).

                        /*message hXtext:node-value view-as alert-box.*/

                        /* Save the string to a longchar to handle image larger than 32000 bytes */

                        hXtext:node-value-to-longchar ( decdlngc ).

                        /* Save the image bytes to a memptr */

                        decdmptr = base64-decode(decdlngc).

                        /* optionally create the image file */

                        copy-lob from decdmptr to file "C:\Development\Images\" + cProduct + "-" + cFileName + ".jpg".

                        iImages = iImages + 1.

                    end.    

Hope the base64-decode can help you.

Peter

This thread is closed