3

My XML File is like this

<A_VERY_VERY_LONG_TITLE xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://tempuri.org/">
    <DATA_LIST>
        <DATA_LIST>         
            <ELEMENT_NO1 xmlns="">ABCDEFG_1</ELEMENT_NO1>
            <ELEMENT_NO2 xmlns="">1234567_1</ELEMENT_NO2>
            <ELEMENT_NO3 xmlns=""/>         
        </DATA_LIST>
        <DATA_LIST>
            <ELEMENT_NO1 xmlns="">ABCDEFG_2</ELEMENT_NO1>
            <ELEMENT_NO2 xmlns="">1234567_2</ELEMENT_NO2>
            <ELEMENT_NO3 xmlns="">A1B2C3D_2</ELEMENT_NO3>       
        </DATA_LIST>
        <DATA_LIST>
            <ELEMENT_NO1 xmlns="">ABCDEFG_3</ELEMENT_NO1>
            <ELEMENT_NO2 xmlns="">1234567_3</ELEMENT_NO2>
            <ELEMENT_NO3 xmlns="">A1B2C3D_3</ELEMENT_NO3>       
        </DATA_LIST>
    </DATA_LIST>
    <SOMETHING>SOME-VALUE</SOMETHING>
    <SOMETHING_ELSE>SOME-OTHER-VALUE</SOMETHING_ELSE>
</A_VERY_VERY_LONG_TITLE>

And my code sample is

DEFINE VARIABLE lOK      AS LOGICAL NO-UNDO.

DEFINE TEMP-TABLE DATA_LIST NO-UNDO
    FIELD ELEMENT_NO1           AS CHARACTER
    FIELD ELEMENT_NO2           AS CHARACTER
    FIELD ELEMENT_NO3           AS CHARACTER   .

DEFINE DATASET DATA FOR DATA_LIST.

lOk = DATASET DATA:READ-XML("file",                /* SourceType             */
                            "C:\xmlFile.xml",      /* File                   */
                            "append",              /* ReadMode               */
                            ?,                     /* SchemaLocation         */
                            ?,                     /* OverrideDefaultMapping */
                            ?,                     /* FieldTypeMapping       */
                            ?).                    /* VerifySchemaMode       */

FOR EACH DATA_LIST:
    DISPLAY DATA_LIST.ELEMENT_NO1   FORMAT "x(20)"
            DATA_LIST.ELEMENT_NO2   FORMAT "x(20)"
            DATA_LIST.ELEMENT_NO3   FORMAT "x(20)"
    WITH WIDTH 120  .

END.

I can access DATA_LIST elements succesfully. But I can't reach data "SOMETHING" and "SOMETHING_ELSE" . I've tried to Define a Temp-Table for this values too but it couldn't work. (I'm getting an empty screen.)

Thanks for help.

pikk
  • 525
  • 1
  • 12
  • 26
  • XML always needs a root element. That's part of the XML specification. So you need a tag that encloses everything. If it isn't there the xml document is malformed. If it is there: post the entire document! – Jensd Jan 30 '14 at 16:53
  • Thanks for your help. Isn't "A_VERY_VERY_LONG_TITLE" encloses everything? ( I've made a correction, it has a close tag now. ) – pikk Jan 31 '14 at 08:32
  • That looks more correct! – Jensd Jan 31 '14 at 12:17

1 Answers1

4

The something and something else are outside the definition of the Data_List table. Try this:

DEFINE VARIABLE lOK      AS LOGICAL NO-UNDO.

DEFINE TEMP-TABLE DATA_LIST NO-UNDO
    FIELD ELEMENT_NO1           AS CHARACTER
    FIELD ELEMENT_NO2           AS CHARACTER
    FIELD ELEMENT_NO3           AS CHARACTER   .

Define Temp-Table A_VERY_VERY_LONG_TITLE no-undo
    field SOMETHING as character
    field SOMETHING_ELSE as character.

DEFINE DATASET DATA FOR DATA_LIST, A_VERY_VERY_LONG_TITLE.

lOk = DATASET DATA:READ-XML("file",                /* SourceType             */
                            "C:\xmlFile.xml",      /* File                   */
                            "append",              /* ReadMode               */
                            ?,                     /* SchemaLocation         */
                            ?,                     /* OverrideDefaultMapping */
                            ?,                     /* FieldTypeMapping       */
                            ?).                    /* VerifySchemaMode       */

FOR EACH DATA_LIST:
    DISPLAY DATA_LIST.ELEMENT_NO1   FORMAT "x(20)"
            DATA_LIST.ELEMENT_NO2   FORMAT "x(20)"
            DATA_LIST.ELEMENT_NO3   FORMAT "x(20)"
    WITH WIDTH 120  .
END.
For EACH A_VERY_VERY_LONG_TITLE:
    DISPLAY A_VERY_VERY_LONG_TITLE.SOMETHING format "x(40)"
            A_VERY_VERY_LONG_TITLE.SOMETHING_ELSE format "x(40)" 
    WITH WIDTH 220.
END.

It worked for me :)

JTMon
  • 3,189
  • 22
  • 24