ibmi-brunch-learn

Announcement

Collapse
No announcement yet.

Problem parsing XML field to XML fields in another table

Collapse
X
 
  • Filter
  • Time
  • Show
Clear All
new posts

  • Problem parsing XML field to XML fields in another table

    I have two tables:
    Code:
    CREATE TABLE T1 (
    ID INTEGER NOT NULL,
    DTA XML NOT NULL);
    Code:
    CREATE TABLE T2 (
    RN INTEGER NOT NULL,
    X1 XML,
    X2 XML )
    and data

    Code:
    <D>
        <ID>1</ID>
        <X1>
            <R>
                <F>1</F>
                <F>2</F>
            </R>
            <R>
                <F>1</F>
                <F>2</F>
                <F>99999</F>
            </R>
        </X1>
        <X2>
            <R>
                <F>bsa</F>
                <F>dsad</F>
            </R>
            <R>
                <F>asd</F>
                <F>ad</F>
                <F>as</F>
            </R>?
    </X2>
    </D>


    Now I save the data
    Code:
    INSERT INTO T1 VALUES( XMLPARSE DOCUMENT( 'above XML' ))
    Than I want to split the data
    Code:
    INSERT INTO T2
    ( select xmldta.* from T1 cm,
                                    XMLTABLE('/D' PASSING cm.DTA
                                                     COLUMNS
                                                        RN for ordinality,
                                                        X1 XML PATH './X1'
                                                        X2 XML PATH './X2'
                                                     ) xmldta
    )


    I receive exception: XMLvalue not a well-formed complete

    The SELECT command shows the data correctly
    Code:
    select xmldta.* from T1 cm,
       XMLTABLE('/D' PASSING cm.DTA
                COLUMNS
                       RN for ordinality,
                       X1 XML PATH './X1'
                       X2 XML PATH './X2'
                ) xmldta
    X1 and X2 as an array

    What am I doing wrong?


    BUT !!!
    Code:
    INSERT INTO T2
    ( select xmldta.* from T1 cm,
                                    XMLTABLE('/D' PASSING cm.DTA
                                                     COLUMNS
                                                        RN for ordinality,
                                                        X1 XML PATH './X1[1]'
                                                        X2 XML PATH './X2[1]'
                                                     ) xmldta
    )

    works. But of course in X1 ist stored only first element

  • #2
    I've got it!!!

    It is not what I wanted but almost:

    Code:
    INSERT INTO T2
    ( select xmldta.* from T1 cm,
    XMLTABLE('/D' PASSING cm.DTA
    COLUMNS
    RN for ordinality,
    X1 XML PATH '.'
    X2 XML PATH '.'
    ) xmldta
    )


    Thank you: Matthias Nicola and Vitor Rodrigues for document "XMLTABLE by example, Part 1"

    Comment

    Working...
    X