XML & JSON Parse EtmeParsing XML & JSON

This page is part of an incremental translation project. Body text not yet translated to Turkish falls back to English even in TR mode.

Hem XML hem JSON, sistemler arasında insan tarafından okunabilir bir formatta data aktarmak için yaygın formatlardır. Bu bölüm, xml & json formatlarını handle etmek/parse etmek için tüm seçenekleri tanıtmayı amaçlar.Both XML and JSON are common formats to transfer data between systems in a human readable format. This sections aims to introduce all options to handle/parse xml & json formats.

XML & JSON Arasında DönüşümConversion Between XML & JSON

XML'i JSON'a DönüştürmeConvert XML to JSON

CONVERTXMLJSON( {input}, 'JSON');
<menu id="file" value="File">
        <popup>
                <menuitem value="New" onclick="CreateNewDoc()" />
                <menuitem value="Open" onclick="OpenDoc()" />
                <menuitem value="Close" onclick="CloseDoc()" />
        </popup>
</menu>
OBJECT:
        STRING STRJSON,
        STRING STRINGVAR3;

STRJSON = CONVERTXMLJSON(STRINGVAR3, 'JSON');
STRINGVAR3 = STRJSON;
{
  "@id": "file",
  "@value": "File",
  "popup":   [
                {
                "@value": "New",
                "@onclick": "CreateNewDoc()"
        },
                {
                "@value": "Open",
                "@onclick": "OpenDoc()"
        },
                {
                "@value": "Close",
                "@onclick": "CloseDoc()"
        }
  ]
}

JSON'u XML'e DönüştürmeConvert JSON to XML

CONVERTXMLJSON( {input}, 'XML'[, 'NOTYPEHINT' | 'JSONPREFIX'] );
{"menu": {
  "id": "file",
  "value": "File",
  "popup": {
        "menuitem": [
          {"value": "New", "onclick": "CreateNewDoc()"},
          {"value": "Open", "onclick": "OpenDoc()"},
          {"value": "Close", "onclick": "CloseDoc()"}
        ]
  }
}}
OBJECT:
        STRING STRXML,
        STRING STRINGVAR3;

STRXML = CONVERTXMLJSON(STRINGVAR3,'XML','NOTYPEHINT');
STRINGVAR3 = STRXML;
<?xml version="1.0" encoding="UTF-8"?>
<o>
   <menu>
          <id>file</id>
          <popup>
                 <menuitem>
                        <e>
                           <onclick>CreateNewDoc()</onclick>
                           <value>New</value>
                        </e>
                        <e>
                           <onclick>OpenDoc()</onclick>
                           <value>Open</value>
                        </e>
                        <e>
                           <onclick>CloseDoc()</onclick>
                           <value>Close</value>
                        </e>
                 </menuitem>
          </popup>
          <value>File</value>
   </menu>
</o>

XML Structure'ını OkumaReading XML Structure

READXMLSTRUCTURE {xmlcontent} TO {targettable};
ID
PID
NAME
PATH
VALUE
LEVEL
ISATTRIBUTE
<?xml version="1.0" ?>
<CustomerList>
        <ListInfo>
                <CreatedAt>10.10.2015</CreatedAt>
                <CreatedBy>btan</CreatedBy>
        </ListInfo>

        <Customer Name="XYZ Financial Solutions">
                <City>Tokyo</City>
                <ProductGroup>Payment Systems</ProductGroup>
        </Customer>

        <Customer Name="ABC Technology">
                <City>Madrid</City>
                <ProductGroup>Mobile Applications</ProductGroup>
        </Customer>

</CustomerList>
READXMLSTRUCTURE STRINGVAR3 TO TMPTABLE;
SET TMPTABLE TO TABLE TMPTABLE;

Bazı Faydalı XML Function'larıSome Useful XML Functions

XML Document'lerini FormatlamaFormatting XML Documents

OBJECT:
        STRING STRXML,
        STRING STRINGVAR3;

STRXML = '<ROOT><TEAM><NAME>Team 1</NAME><SCORE>0</SCORE>';
STRXML = STRXML + '</TEAM><TEAM><NAME>Team 2</NAME>';
STRXML = STRXML + '<SCORE>1</SCORE></TEAM></ROOT>';

STRINGVAR3 = WRAPXML(STRXML);
<?xml version="1.0" encoding="UTF-8"?><ROOT>
  <TEAM>
        <NAME>Team 1</NAME>
        <SCORE>0</SCORE>
  </TEAM>
  <TEAM>
        <NAME>Team 2</NAME>
        <SCORE>1</SCORE>
  </TEAM>
</ROOT>

CLEARDOCUMENT() Function'ıCLEARDOCUMENT() Function

OBJECT:
        STRING STRXML,
        STRING STRINGVAR3;

STRXML = '<ROOT><TEAM><NAME>Team 1</NAME><SCORE>0</SCORE>';
STRXML = STRXML + '</TEAM><TEAM><NAME>Team 2</NAME>';
STRXML = STRXML + '<SCORE>1</SCORE></TEAM></ROOT>';

STRINGVAR3 = CLEARDOCUMENT(STRXML,'TEAM');

XML Document'lerini Validate EtmeValidating XML Documents

VALIDATEXML {validatorpath} {xmlpath} WITH {valtype} [TO {details}];
VALIDATEXML TEXT {validatortext} {xmlastext} WITH {valtype} [TO {details}];
<?xml version="1.0" encoding="UTF-8"?>
<schema xmlns="http://purl.oclc.org/dsdl/schematron">

<ns uri="http://www.topologi.com/example" prefix="ex"/>

<pattern name="Check structure">
        <rule context="ex:Person">
                <assert test="@Title">
                        Person must have title
                </assert>
                <assert test="count(ex:Name)=1 and count(ex:Gender)=1">
                        Person should have Name / Gender
                </assert>
                <assert test="ex:*[1] = ex:Name">
                        Name must appear before element Gender
                </assert>
        </rule>
</pattern>
<pattern name="Check co-occurrence constraints">
        <rule context="ex:Person">
                <assert test="(@Title = 'Mr' and ex:Gender = 'Male')
                   or @Title != 'Mr'">
                        If the Title is "Mr", gender must be "Male"
                </assert>
        </rule>
</pattern>

</schema>
<ex:Person Title="Mr" xmlns:ex="http://www.topologi.com/example">
        <ex:Name>Eddie</ex:Name>
        <ex:Gender>Male</ex:Gender>
</ex:Person>
OBJECT:
        STRING STRXMLPATH,
        STRING STRSCHPATH
        STRING STRINGVAR3;

STRXMLPATH = 'xml.xml';
STRSCHPATH = 'validator.sch';

COPYFILE '*C:\TMP\xml.xml' INTO STRXMLPATH;
COPYFILE '*C:\TMP\validator.sch' INTO STRSCHPATH;

VALIDATEXML STRSCHPATH STRXMLPATH WITH SCHEMATRON TO STRINGVAR3;
STRINGVAR1 = SYS_STATUS + ' ' + SYS_STATUSERROR;

XML Document'lerini Parse EtmeParsing XML Documents

XML Map TanımlamaDefining XML Maps

CREATEXMLMAP {mapname};
CLEAR XMLMAP {mapname};
MAP ELEMENT {elementname} AS [XMLTABLE | XMLROOTTABLE] {tablename} IN {mapname};

MAP ATTRIBUTE {attributename} OF {elementname}
                        AS XMLCOLUMN {columnname} IN {mapname};

MAP CHILD {elementname} OF {elementname} AS XMLCOLUMN {columnname} IN {mapname};

MAP PCDATA OF {elementname} AS XMLCOLUMN {columnname} IN {mapname};

MAP RELATION {elementname} TO {elementname} LINK {primarykey}
                        WITH {foreignkey} GENERATE YES | NO IN {mapname};

XML Map'lerle XML Parse EtmeParsing XML with XML Maps

PARSEXML {docpath} USING {mapname};
CONVERTXMLTABLE {xmltable} INTO {table} FROM {mapname};

XML Map Olmadan Parse EtmeParsing without XML Map

PARSEXML TEXT {xmlastext} INTO {tablename};
PARSEXML {filepath} INTO {tablename};

XML Parsing ÖrnekleriXML Parsing Examples

Örnek 1: Auto Parser KullanmaExample 1: Using Auto Parser

OBJECT:
        STRING STRINGVAR3;

STRINGVAR3 = '<?xml version="1.0" ?>
<CustomerList>
                <Customer>
                        <Name>IAS Software</Name>
                        <Country>Turkey</Country>
                </Customer>
                <Customer>
                        <Name>XYZ Technology</Name>
                        <Country>Turkey</Country>
                </Customer>
                <Customer>
                        <Name>ABC Design</Name>
                        <Country>Turkey</Country>
                </Customer>
</CustomerList>';

OBJECT:
        TABLE CUSTOMERS;

PARSEXML TEXT STRINGVAR3 INTO CUSTOMERS;

COPY TABLE CUSTOMERS INTO TMPTABLE;
SET TMPTABLE TO TABLE TMPTABLE;

Örnek 2: Birden Fazla Auto ParserExample 2: Multiple Auto Parsers

OBJECT:
        STRING STRINGVAR3;

STRINGVAR3 = '<PCARD_CARD_GET_DETAILResponse xmlns="http://tempuri.org/">
        <PCARD_CARD_GET_DETAILResult>
                <ConditionNo>100</ConditionNo>
                <ConditionMessage>Invalid username or password</ConditionMessage>
                <Success>false</Success>
                <cardInfo />
                <cardCredit>
                        <lmt xsi:nil="true" />
                        <dfl_amt xsi:nil="true" />
                        <bln xsi:nil="true" />
                        <dsc xsi:nil="true" />
                </cardCredit>
        </PCARD_CARD_GET_DETAILResult>
</PCARD_CARD_GET_DETAILResponse>';

PARSEXML TEXT STRINGVAR3 INTO TMPTABLE;
PARSEXML TEXT TMPTABLE_XMLData INTO TMPTABLE;
SET TMPTABLE TO TABLE TMPTABLE;

Örnek 3: PCData KullanmaExample 3: Using PCData

<?xml version="1.0" ?>
<CustomerList>
        <Customer>IAS Software</Customer>
        <Customer>XYZ Technology</Customer>
        <Customer>ABC Design</Customer>
</CustomerList>
OBJECT:
        TABLE CUSTOMERS;

CLEAR XMLMAP DEMOMAP;
CREATEXMLMAP DEMOMAP;

MAP ELEMENT CustomerList AS XMLROOTTABLE CustomerList IN DEMOMAP;
MAP ELEMENT Customer AS XMLTABLE Customer IN DEMOMAP;
MAP PCDATA OF Customer AS XMLCOLUMN Customer IN DEMOMAP;
MAP RELATION Customer TO CustomerList LINK 'asdf'
                                        WITH DUMMY  GENERATE NO IN DEMOMAP;

COPYFILE '*C:\TMP\XML\ex3.xml' INTO '.\XMLParsing\ex3.xml';
PARSEXML '.\XMLParsing\ex3.xml' USING DEMOMAP;

CONVERTXMLTABLE Customer INTO TABLE CUSTOMERS FROM DEMOMAP;

COPY TABLE CUSTOMERS INTO TMPTABLE;
SET TMPTABLE TO TABLE TMPTABLE;

Örnek 4: Child'ları OkumaExample 4: Reading Childs

<?xml version="1.0" ?>
<CustomerList>
        <Sector>Technology</Sector>
        <Customer>
                <CustName>XYZ Industries</CustName>
                <City>Tokyo</City>
        </Customer>
        <Customer>
                <CustName>ABC Technology</CustName>
                <City>Madrid</City>
        </Customer>
        <Customer>
                <CustName>IAS Software</CustName>
                <City>Istanbul</City>
        </Customer>
</CustomerList>
OBJECT:
        TABLE CUSTOMERS,
        INTEGER ROWCOUNT;

CLEAR XMLMAP DEMOMAP;
CREATEXMLMAP DEMOMAP;
MAP ELEMENT CustomerList AS XMLROOTTABLE CustomerList IN DEMOMAP;
MAP CHILD Sector OF CustomerList AS XMLCOLUMN Sector IN DEMOMAP;
MAP ELEMENT Customer AS XMLTABLE CUSTOMER IN DEMOMAP;
MAP CHILD CustName OF Customer AS XMLCOLUMN CustName IN DEMOMAP;
MAP CHILD City OF Customer AS XMLCOLUMN City IN DEMOMAP;
MAP RELATION Customer TO CustomerList LINK Sector
                                        WITH Sector GENERATE YES IN DEMOMAP;

COPYFILE '*C:\TMP\XML\ex4.xml' INTO '.\XMLParsing\ex4.xml';
PARSEXML '.\XMLParsing\ex4.xml' USING DEMOMAP;
CONVERTXMLTABLE CUSTOMER INTO TABLE CUSTOMERS FROM DEMOMAP;

ROWCOUNT = CUSTOMERS_ROWCOUNT;
COPY TABLE CUSTOMERS INTO TMPTABLE;
SET TMPTABLE TO TABLE TMPTABLE;

Örnek 5: Extra Relation'lı Child'larExample 5: Childs with Extra Relation

<PCARD_CARD_GET_DETAILResponse xmlns="http://tempuri.org/">
          <PCARD_CARD_GET_DETAILResult>
                <ConditionNo>100</ConditionNo>
                <ConditionMessage>Invalid username or password</ConditionMessage>
                <Success>false</Success>
                <cardInfo />
                <cardCredit>
                  <lmt/>
                  <dfl_amt/>
                  <bln/>
                  <dsc/>
                </cardCredit>
          </PCARD_CARD_GET_DETAILResult>
</PCARD_CARD_GET_DETAILResponse>
OBJECT:
        TABLE DETAILRESULT;

CLEAR XMLMAP DEMOMAP;
CREATEXMLMAP DEMOMAP;

MAP ELEMENT PCARD_CARD_GET_DETAILResponse
                AS XMLROOTTABLE PCARD_CARD_GET_DETAILResponse IN DEMOMAP;
MAP ELEMENT PCARD_CARD_GET_DETAILResult
                        AS XMLTABLE PCARD_CARD_GET_DETAILResult IN DEMOMAP;
MAP CHILD ConditionNo OF PCARD_CARD_GET_DETAILResult
                                AS XMLCOLUMN ConditionNo IN DEMOMAP;
MAP CHILD ConditionMessage OF PCARD_CARD_GET_DETAILResult
                                AS XMLCOLUMN ConditionMesaj IN DEMOMAP;
MAP CHILD Success OF PCARD_CARD_GET_DETAILResult
                                AS XMLCOLUMN Success IN DEMOMAP;
MAP CHILD ConditionNo OF PCARD_CARD_GET_DETAILResult
                                AS XMLCOLUMN ConditionNo IN DEMOMAP;

MAP RELATION PCARD_CARD_GET_DETAILResult TO PCARD_CARD_GET_DETAILResponse LINK
                                DUMMY WITH DUMMY  GENERATE NO IN DEMOMAP;

COPYFILE '*C:\TMP\XML\ex5.xml' INTO '.\XMLParsing\ex5.xml';
PARSEXML '.\XMLParsing\ex5.xml' USING DEMOMAP;
CONVERTXMLTABLE PCARD_CARD_GET_DETAILResult
                                        INTO TABLE DETAILRESULT FROM DEMOMAP;

COPY TABLE DETAILRESULT INTO TMPTABLE;
SET TMPTABLE TO TABLE TMPTABLE;

Örnek 6: Attribute'ları OkumaExample 6: Reading Attributes

<?xml version="1.0" ?>
<CustomerList Sector="Technology">
        <Customer>
                <CustName>XYZ Industries</CustName>
                <City>Tokyo</City>
        </Customer>
        <Customer>
                <CustName>ABC Technology</CustName>
                <City>Madrid</City>
        </Customer>
        <Customer>
                <CustName>IAS Software</CustName>
                <City>Istanbul</City>
        </Customer>
</CustomerList>
    OBJECT:
            TABLE CUSTOMERS,
            INTEGER ROWCOUNT;

    CLEAR XMLMAP DEMOMAP;
    CREATEXMLMAP DEMOMAP;

    MAP ELEMENT CustomerList AS XMLROOTTABLE CustomerList IN DEMOMAP;

    /* map attribute for root element*/
    MAP ATTRIBUTE Sector OF CustomerList AS XMLCOLUMN Sector IN DEMOMAP;

    MAP ELEMENT Customer AS XMLTABLE CUSTOMER IN DEMOMAP;
    MAP CHILD CustName OF Customer AS XMLCOLUMN CustName IN DEMOMAP;
    MAP CHILD City OF Customer AS XMLCOLUMN City IN DEMOMAP;

    MAP RELATION Customer TO CustomerList
                    LINK Sector WITH Sector GENERATE YES IN DEMOMAP;

    COPYFILE '*C:\TMP\XML\ex6.xml' INTO '.\XMLParsing\ex6.xml';
PARSEXML '.\XMLParsing\ex6.xml' USING DEMOMAP;
    CONVERTXMLTABLE CUSTOMER INTO TABLE CUSTOMERS FROM DEMOMAP;

    ROWCOUNT = CUSTOMERS_ROWCOUNT;
    COPY TABLE CUSTOMERS INTO TMPTABLE;
    SET TMPTABLE TO TABLE TMPTABLE;

Örnek 7: Child'lardaki Attribute'larExample 7: Attributes On Childs

<?xml version="1.0" ?>
<CustomerList Sector="Technology">
        <Customer CustomerId="C1">
                <CustName>XYZ Industries</CustName>
                <City>Tokyo</City>
        </Customer>
        <Customer CustomerId="C2">
                <CustName>ABC Technology</CustName>
                <City>Madrid</City>
        </Customer>
        <Customer  CustomerId="C3">
                <CustName>IAS Software</CustName>
                <City>Istanbul</City>
        </Customer>
</CustomerList>
OBJECT:
        TABLE CUSTOMERS,
        INTEGER ROWCOUNT;

CLEAR XMLMAP DEMOMAP;
CREATEXMLMAP DEMOMAP;

MAP ELEMENT CustomerList AS XMLROOTTABLE CustomerList IN DEMOMAP;
MAP ATTRIBUTE Sector OF CustomerList AS XMLCOLUMN Sector IN DEMOMAP;

MAP ELEMENT Customer AS XMLTABLE CUSTOMER IN DEMOMAP;
/* attribute for child */
MAP ATTRIBUTE CustomerId OF Customer AS XMLCOLUMN CustomerId IN DEMOMAP;
MAP CHILD CustName OF Customer AS XMLCOLUMN CustName IN DEMOMAP;
MAP CHILD City OF Customer AS XMLCOLUMN City IN DEMOMAP;

MAP RELATION Customer TO CustomerList LINK Sector
                                        WITH Sector GENERATE YES IN DEMOMAP;

COPYFILE '*C:\TMP\XML\ex7.xml' INTO '.\XMLParsing\ex7.xml';
PARSEXML '.\XMLParsing\ex7.xml' USING DEMOMAP;
CONVERTXMLTABLE CUSTOMER INTO TABLE CUSTOMERS FROM DEMOMAP;

ROWCOUNT = CUSTOMERS_ROWCOUNT;

COPY TABLE CUSTOMERS INTO TMPTABLE;
SET TMPTABLE TO TABLE TMPTABLE;

Örnek 8: Birden Fazla Table & Relation Child-AttributeExample 8: Multiple Tables & Relations Childs-Attributes

<?xml version="1.0" ?>
<CustomerList Sector="Technology">

        <Customer CustomerId="C1">
                <CustName>XYZ Industries</CustName>
                <City>Tokyo</City>
                <Order OrderId="O1">
                        <Year>2013</Year>
                        <GrandTotal>100.013</GrandTotal>
                </Order>
        </Customer>

        <Customer CustomerId="C2">
                <CustName>ABC Technology</CustName>
                <City>Madrid</City>

                <Order OrderId="O2">
                        <Year>2011</Year>
                        <GrandTotal>100.011</GrandTotal>
                </Order>
                <Order OrderId="O3">
                        <Year>2012</Year>
                        <GrandTotal>100.012</GrandTotal>
                </Order>

        </Customer>

        <Customer  CustomerId="C3">
                <CustName>IAS Software</CustName>
                <City>Istanbul</City>

                <Order OrderId="O5">
                        <Year>2010</Year>
                        <GrandTotal>100.010</GrandTotal>
                </Order>
                <Order OrderId="O6">
                        <Year>2014</Year>
                        <GrandTotal>100.014</GrandTotal>
                </Order>

        </Customer>
</CustomerList>
OBJECT:
        TABLE CUSTOMERS,
        TABLE ORDERS,
        INTEGER ROWCOUNT;

CLEAR XMLMAP DEMOMAP;
CREATEXMLMAP DEMOMAP;

MAP ELEMENT CustomerList AS XMLROOTTABLE CustomerList IN DEMOMAP;
MAP ATTRIBUTE Sector OF CustomerList AS XMLCOLUMN Sector IN DEMOMAP;

MAP ELEMENT Customer AS XMLTABLE CUSTOMER IN DEMOMAP;
MAP ATTRIBUTE CustomerId OF Customer AS XMLCOLUMN CustomerId IN DEMOMAP;
MAP CHILD CustName OF Customer AS XMLCOLUMN CustName IN DEMOMAP;
MAP CHILD City OF Customer AS XMLCOLUMN City IN DEMOMAP;
MAP RELATION Customer TO CustomerList LINK Sector
                                WITH Sector GENERATE YES IN DEMOMAP;

MAP ELEMENT Order AS XMLTABLE ORDER IN DEMOMAP;
MAP ATTRIBUTE OrderId OF Order AS XMLCOLUMN OrderId IN DEMOMAP;
MAP CHILD Year OF Order AS XMLCOLUMN Year IN DEMOMAP;
MAP CHILD GrandTotal OF Order AS XMLCOLUMN GrandTotal IN DEMOMAP;
MAP RELATION Order TO Customer LINK CustomerId
                                WITH CustomerId GENERATE NO IN DEMOMAP;

COPYFILE '*C:\TMP\XML\ex8.xml' INTO '.\XMLParsing\ex8.xml';
PARSEXML '.\XMLParsing\ex8.xml' USING DEMOMAP;
CONVERTXMLTABLE CUSTOMER INTO TABLE CUSTOMERS FROM DEMOMAP;
CONVERTXMLTABLE ORDER INTO TABLE ORDERS FROM DEMOMAP;

COPY TABLE CUSTOMERS INTO TMPTABLE;
SET TMPTABLE TO TABLE TMPTABLE;
RETURN;
COPY TABLE ORDERS INTO TMPTABLE;
SET TMPTABLE TO TABLE TMPTABLE;

Örnek 9: OrdersId Olmadan Birden Fazla Relation/Extra Orders ColumnExample 9: Multiple Relations/Extra Orders Column Without OrdersId

<?xml version="1.0" ?>
<CustomerList Sector="Technology">

        <Customer CustomerId="C1">
                <CustName>XYZ Industries</CustName>
                <City>Tokyo</City>
                <Orders>
                        <Order OrderId="O1">
                                <Year>2013</Year>
                                <GrandTotal>100.013</GrandTotal>
                        </Order>
                </Orders>
        </Customer>

        <Customer CustomerId="C2">
                <CustName>ABC Technology</CustName>
                <City>Madrid</City>
                <Orders>
                        <Order OrderId="O2">
                                <Year>2011</Year>
                                <GrandTotal>100.011</GrandTotal>
                        </Order>
                        <Order OrderId="O3">
                                <Year>2012</Year>
                                <GrandTotal>100.012</GrandTotal>
                        </Order>
                </Orders>
        </Customer>

        <Customer  CustomerId="C3">
                <CustName>IAS Software</CustName>
                <City>Istanbul</City>
                <Orders>
                        <Order OrderId="O4">
                                <Year>2010</Year>
                                <GrandTotal>100.010</GrandTotal>
                        </Order>
                        <Order OrderId="O5">
                                <Year>2014</Year>
                                <GrandTotal>100.014</GrandTotal>
                        </Order>
                        <Order OrderId="O6">
                                <Year>2015</Year>
                                <GrandTotal>100.015</GrandTotal>
                        </Order>
                </Orders>
        </Customer>
</CustomerList>
OBJECT:
        TABLE CUSTOMERS,
        TABLE ALLORDERS,
        TABLE CUSTOMERORDERS;

CLEAR XMLMAP DEMOMAP;
CREATEXMLMAP DEMOMAP;

MAP ELEMENT CustomerList AS XMLROOTTABLE CustomerList IN DEMOMAP;
MAP ATTRIBUTE Sector OF CustomerList AS XMLCOLUMN Sector IN DEMOMAP;

MAP ELEMENT Customer AS XMLTABLE CUSTOMER IN DEMOMAP;
MAP ATTRIBUTE CustomerId OF Customer AS XMLCOLUMN CustomerId IN DEMOMAP;
MAP CHILD CustName OF Customer AS XMLCOLUMN CustName IN DEMOMAP;
MAP CHILD City OF Customer AS XMLCOLUMN City IN DEMOMAP;

MAP RELATION Customer TO CustomerList LINK Sector
                                        WITH Sector GENERATE YES IN DEMOMAP;

MAP ELEMENT Orders AS XMLTABLE CUSTOMERORDER IN DEMOMAP;
MAP RELATION Orders TO Customer LINK CustomerId
                                        WITH CustomerId GENERATE YES IN DEMOMAP;

MAP ELEMENT Order AS XMLTABLE ORDER IN DEMOMAP;
MAP ATTRIBUTE OrderId OF Order AS XMLCOLUMN OrderId IN DEMOMAP;
MAP CHILD Year OF Order AS XMLCOLUMN Year IN DEMOMAP;
MAP CHILD GrandTotal OF Order AS XMLCOLUMN GrandTotal IN DEMOMAP;
MAP RELATION Order TO Orders LINK CustomerFK
                                        WITH CustomerFK GENERATE YES IN DEMOMAP;

COPYFILE '*C:\TMP\XML\ex9.xml' INTO '.\XMLParsing\ex9.xml';
PARSEXML '.\XMLParsing\ex9.xml' USING DEMOMAP;
CONVERTXMLTABLE CUSTOMER INTO TABLE CUSTOMERS FROM DEMOMAP;
CONVERTXMLTABLE CUSTOMERORDER INTO TABLE CUSTOMERORDERS FROM DEMOMAP;
CONVERTXMLTABLE ORDER INTO TABLE ALLORDERS FROM DEMOMAP;

COPY TABLE CUSTOMERS INTO TMPTABLE;
SET TMPTABLE TO TABLE TMPTABLE;

COPY TABLE ALLORDERS INTO TMPTABLE;
SET TMPTABLE TO TABLE TMPTABLE;

COPY TABLE CUSTOMERORDERS INTO TMPTABLE;
SET TMPTABLE TO TABLE TMPTABLE;

LOOP AT ALLORDERS
BEGIN
        LOCATERECORD BINARYSEARCH COLUMNS CustomerFK VALUES
                                        ALLORDERS_CustomerFK ON CUSTOMERORDERS;
        STRINGVAR2 = STRINGVAR2 + ' ' + CUSTOMERORDERS_CustomerId;
        ALLORDERS_CustomerFK = CUSTOMERORDERS_CustomerId;
ENDLOOP;


COPY TABLE ALLORDERS INTO TMPTABLE;
SET TMPTABLE TO TABLE TMPTABLE;

COPY TABLE CUSTOMERORDERS INTO TMPTABLE;
SET TMPTABLE TO TABLE TMPTABLE;

Örnek 10: Non-Generated Column ile RelationExample 10: Relation with Non-Generated Column

<?xml version="1.0" encoding="UTF-8"?>
<string xmlns="http://tempuri.org/">
  <Orders>
        <Order id="ORDER1">
          <Order_org>ORDERORG1</Order_org>
          <Orderline id="ORDERLINE1">
                <OrderLine_org>ORDERORG1</OrderLine_org>
          </Orderline>
          <Orderline id="ORDERLINE2">
                <OrderLine_org>ORDERORG1</OrderLine_org>
          </Orderline>
        </Order>
  </Orders>
</string>
OBJECT:
        TABLE ORDERLINES,
        TABLE ORDERS;

CLEAR XMLMAP DEMOMAP;
CREATEXMLMAP DEMOMAP;

MAP ELEMENT string AS XMLROOTTABLE string IN DEMOMAP;
MAP ATTRIBUTE xmlns OF string AS XMLCOLUMN xmlns IN DEMOMAP;

MAP ELEMENT Orders AS XMLTABLE ALLORDERS IN DEMOMAP;
MAP RELATION Orders TO string LINK xmlns WITH xmlns GENERATE NO IN DEMOMAP;

MAP ELEMENT Order AS XMLTABLE CUSTOMERORDER IN DEMOMAP;
MAP ATTRIBUTE id OF Order AS XMLCOLUMN orderid IN DEMOMAP;
MAP CHILD Order_org OF Order AS XMLCOLUMN Order_org IN DEMOMAP;
MAP RELATION Order TO Orders LINK CustomerId WITH DUMMY GENERATE NO IN DEMOMAP;

MAP ELEMENT Orderline AS XMLTABLE ORDERLINE IN DEMOMAP;
MAP ATTRIBUTE id OF Orderline AS XMLCOLUMN orderlineid IN DEMOMAP;
MAP CHILD OrderLine_org OF Orderline AS XMLCOLUMN OrderLine_org IN DEMOMAP;
MAP RELATION Orderline TO Order LINK orderid
                                        WITH orderid GENERATE YES IN DEMOMAP;

COPYFILE '*C:\TMP\XML\ex10.xml' INTO '.\XMLParsing\ex10.xml';
PARSEXML '.\XMLParsing\ex10.xml' USING DEMOMAP;

CONVERTXMLTABLE CUSTOMERORDER INTO TABLE ORDERS FROM DEMOMAP;
CONVERTXMLTABLE ORDERLINE INTO TABLE ORDERLINES FROM DEMOMAP;
CONVERTXMLTABLE ALLORDERS INTO TABLE ALLORDER FROM DEMOMAP;

COPY TABLE ORDERLINES INTO TMPTABLE;
SET TMPTABLE TO TABLE TMPTABLE;

COPY TABLE ORDERS INTO TMPTABLE;
SET TMPTABLE TO TABLE TMPTABLE;

Alıştırma 1: READXMLSTRUCTURE Kullanarak Parse EtmeExercise 1: Parse using READXMLSTRUCTURE

Aşağıdaki xml'de listelenen tüm order'ların GrandTotal değerlerinin toplamını, READXMLSTRUCTURE komutunu kullanarak hesaplayın.Calculate sum of GrandTotal values of all orders listed in xml below, using READXMLSTRUCTURE command.

<?xml version="1.0" ?>
<CustomerList Sector="Technology">

        <Customer CustomerId="C1">
                <CustName>XYZ Industries</CustName>
                <City>Tokyo</City>
                <Order OrderId="O1">
                        <Year>2013</Year>
                        <GrandTotal>100.013</GrandTotal>
                </Order>
        </Customer>

        <Customer CustomerId="C2">
                <CustName>ABC Technology</CustName>
                <City>Madrid</City>

                <Order OrderId="O2">
                        <Year>2011</Year>
                        <GrandTotal>100.011</GrandTotal>
                </Order>
                <Order OrderId="O3">
                        <Year>2012</Year>
                        <GrandTotal>100.012</GrandTotal>
                </Order>

        </Customer>

        <Customer  CustomerId="C3">
                <CustName>IAS Software</CustName>
                <City>Istanbul</City>

                <Order OrderId="O5">
                        <Year>2010</Year>
                        <GrandTotal>100.010</GrandTotal>
                </Order>
                <Order OrderId="O6">
                        <Year>2014</Year>
                        <GrandTotal>100.014</GrandTotal>
                </Order>
        </Customer>
</CustomerList>

Alıştırma 2: Basit XML Document'lerini Parse EtmeExercise 2: Parsing Simple XML Documents

Aşağıdaki XML document'te listelenen product'lar için grand total değerini (her product için Price*Quantity toplamı) hesaplayın:Calculate grand total value (sum of Price*Quantity for each product) for the products listed in XML document below:

<ProductList>
        <Product>
                <Name>Product 1</Name>
                <Price>6.30</Price>
                <Quantity>5</Quantity>
        </Product>
        <Product>
                <Name>Product 2</Name>
                <Price>2.50</Price>
                <Quantity>3</Quantity>
        </Product>
        <Product>
                <Name>Product 3</Name>
                <Price>1.20</Price>
                <Quantity>2</Quantity>
        </Product>
</ProductList>

İşte çözüm:Here is the solution:

OBJECT:
        TABLE PRODUCTLIST,
        TABLE PRODUCT,
        INTEGER ROWCOUNT;

CLEAR XMLMAP DEMOMAP;
CREATEXMLMAP DEMOMAP;

MAP ELEMENT ProductList AS XMLROOTTABLE ProductList IN DEMOMAP;

MAP ELEMENT Product AS XMLTABLE Product IN DEMOMAP;

MAP CHILD Name OF Product AS XMLCOLUMN Name IN DEMOMAP;
MAP CHILD Price OF Product AS XMLCOLUMN Price IN DEMOMAP;
MAP CHILD Quantity OF Product AS XMLCOLUMN Quantity IN DEMOMAP;

MAP RELATION Product TO ProductList LINK DUMMY WITH DUMMY GENERATE NO IN DEMOMAP;

COPYFILE '*C:\TMP\XML\ex12.xml' INTO '.\XMLParsing\ex12.xml';
PARSEXML '.\XMLParsing\ex12.xml' USING DEMOMAP;
CONVERTXMLTABLE Product INTO TABLE PRODUCT FROM DEMOMAP;

REMOVE COLUMN DUMMY PERMANENT FROM PRODUCT;
APPEND COLUMN GRANDTOTAL, DECIMAL, 10 TO PRODUCT;

COPY TABLE PRODUCT INTO TMPTABLE;

LOOP AT TMPTABLE
BEGIN
        DECIMALVAR1 = TMPTABLE_Price;
        DECIMALVAR2 = TMPTABLE_Quantity;
        TMPTABLE_GRANDTOTAL = DECIMALVAR1 * DECIMALVAR2;
ENDLOOP;

SET TMPTABLE TO TABLE TMPTABLE;

Alıştırma 3: Karmaşık XML Document'lerini Parse EtmeExercise 3: Parsing Complex XML Documents

Alıştırma 4: ValidationExercise 4: Validation