<?xml version="1.0" encoding="UTF-8"?>
<rss xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:taxo="http://purl.org/rss/1.0/modules/taxonomy/" version="2.0">
  <channel>
    <title>topic Re: XML to ABAP in Application Development and Automation Discussions</title>
    <link>https://community.sap.com/t5/application-development-and-automation-discussions/xml-to-abap/m-p/4698996#M1104219</link>
    <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;REPORT  ZSRK_022                                .&lt;/P&gt;&lt;UL&gt;&lt;UL&gt;&lt;LI level="2" type="ul"&gt;&lt;P&gt;Read XML file from presentation server*&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;Load iXML Lib.&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;TYPE-POOLS: IXML.&lt;/P&gt;&lt;P&gt;CLASS CL_IXML DEFINITION LOAD.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;DATA: G_IXML TYPE REF TO IF_IXML.&lt;/P&gt;&lt;P&gt;DATA: STREAMFACTORY TYPE REF TO IF_IXML_STREAM_FACTORY.&lt;/P&gt;&lt;P&gt;DATA: ISTREAM TYPE REF TO IF_IXML_ISTREAM.&lt;/P&gt;&lt;P&gt;DATA: DOCUMENT TYPE REF TO IF_IXML_DOCUMENT.&lt;/P&gt;&lt;P&gt;DATA: PARSER TYPE REF TO IF_IXML_PARSER.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;DATA: LV_FILE_URL TYPE RLGRAP-FILENAME.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;You should provide the parameter for file name&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;LV_FILE_URL = 'C:input_xml.xml'.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;TYPES: BEGIN OF XML_LINE,&lt;/P&gt;&lt;P&gt;        DATA(256) TYPE X,&lt;/P&gt;&lt;P&gt;      END OF XML_LINE.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;TYPES: BEGIN OF TY_HEADER,&lt;/P&gt;&lt;P&gt;         CUST_NAME(20)     TYPE C,&lt;/P&gt;&lt;P&gt;         CARD_NO(20)       TYPE C,&lt;/P&gt;&lt;P&gt;         TAX_AMOUNT(10)    TYPE C,&lt;/P&gt;&lt;P&gt;         TOTAL_AMOUNT(10)  TYPE C,&lt;/P&gt;&lt;P&gt;       END OF TY_HEADER.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;TYPES: BEGIN OF TY_ITEM,&lt;/P&gt;&lt;P&gt;         ITEM_NO(4)      TYPE N,&lt;/P&gt;&lt;P&gt;         ITEM_ID(20)     TYPE C,&lt;/P&gt;&lt;P&gt;         ITEM_TITLE(50)  TYPE C,&lt;/P&gt;&lt;P&gt;         ITEM_QTY(10)    TYPE C,&lt;/P&gt;&lt;P&gt;         ITEM_UPRICE(10) TYPE C,&lt;/P&gt;&lt;P&gt;       END OF TY_ITEM.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;DATA: GV_HEADER TYPE TY_HEADER.&lt;/P&gt;&lt;P&gt;DATA: GT_ITEM   TYPE STANDARD TABLE OF TY_ITEM   WITH HEADER LINE.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;DATA: XML_TABLE      TYPE TABLE OF XML_LINE,&lt;/P&gt;&lt;P&gt;      XML_TABLE_SIZE TYPE I.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;The next step is creating the main factory for the iXML library:&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;G_IXML = CL_IXML=&amp;gt;CREATE( ).&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;Now Create Stream Factory&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;STREAMFACTORY = G_IXML-&amp;gt;CREATE_STREAM_FACTORY( ).&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;upload a file from the client's workstation&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;CALL FUNCTION 'WS_UPLOAD'&lt;/P&gt;&lt;P&gt;  EXPORTING&lt;/P&gt;&lt;P&gt;    FILENAME   = LV_FILE_URL&lt;/P&gt;&lt;P&gt;    FILETYPE   = 'BIN'&lt;/P&gt;&lt;P&gt;  IMPORTING&lt;/P&gt;&lt;P&gt;    FILELENGTH = XML_TABLE_SIZE&lt;/P&gt;&lt;P&gt;  TABLES&lt;/P&gt;&lt;P&gt;    DATA_TAB   = XML_TABLE&lt;/P&gt;&lt;P&gt;  EXCEPTIONS&lt;/P&gt;&lt;P&gt;    OTHERS     = 11.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;wrap the table containing the file into a stream&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;ISTREAM = STREAMFACTORY-&amp;gt;CREATE_ISTREAM_ITABLE( TABLE = XML_TABLE&lt;/P&gt;&lt;P&gt;                                                SIZE  = XML_TABLE_SIZE ).&lt;/P&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;Create XML Document instance&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;DOCUMENT = G_IXML-&amp;gt;CREATE_DOCUMENT( ).&lt;/P&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;Create parser Object&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;PARSER = G_IXML-&amp;gt;CREATE_PARSER( STREAM_FACTORY = STREAMFACTORY&lt;/P&gt;&lt;P&gt;                                ISTREAM = ISTREAM&lt;/P&gt;&lt;P&gt;                                DOCUMENT = DOCUMENT ).&lt;/P&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;Parse an XML document into a DOM tree&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;*parser-&amp;amp;gtparse( ).&lt;/P&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;Parsing Error Processing&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;IF PARSER-&amp;gt;PARSE( ) NE 0.&lt;/P&gt;&lt;P&gt;  IF PARSER-&amp;gt;NUM_ERRORS( ) NE 0.&lt;/P&gt;&lt;P&gt;    DATA: PARSEERROR TYPE REF TO IF_IXML_PARSE_ERROR,&lt;/P&gt;&lt;P&gt;          STR        TYPE STRING,&lt;/P&gt;&lt;P&gt;          I          TYPE I,&lt;/P&gt;&lt;P&gt;          COUNT      TYPE I,&lt;/P&gt;&lt;P&gt;          INDEX      TYPE I.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;    COUNT = PARSER-&amp;gt;NUM_ERRORS( ).&lt;/P&gt;&lt;P&gt;    WRITE: COUNT, ' parse errors have occured:'.&lt;/P&gt;&lt;P&gt;    INDEX = 0.&lt;/P&gt;&lt;P&gt;    WHILE INDEX &amp;lt; COUNT.&lt;/P&gt;&lt;P&gt;      PARSEERROR = PARSER-&amp;gt;GET_ERROR( INDEX = INDEX ).&lt;/P&gt;&lt;P&gt;      I = PARSEERROR-&amp;gt;GET_LINE( ).&lt;/P&gt;&lt;P&gt;      WRITE: 'line: ', I.&lt;/P&gt;&lt;P&gt;      I = PARSEERROR-&amp;gt;GET_COLUMN( ).&lt;/P&gt;&lt;P&gt;      WRITE: 'column: ', I.&lt;/P&gt;&lt;P&gt;      STR = PARSEERROR-&amp;gt;GET_REASON( ).&lt;/P&gt;&lt;P&gt;      WRITE: STR.&lt;/P&gt;&lt;P&gt;      INDEX = INDEX + 1.&lt;/P&gt;&lt;P&gt;    ENDWHILE.&lt;/P&gt;&lt;P&gt;  ENDIF.&lt;/P&gt;&lt;P&gt;ENDIF.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;Close the stream since it ï¿½s not needed anymore&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;CALL METHOD ISTREAM-&amp;gt;CLOSE( ).&lt;/P&gt;&lt;P&gt;CLEAR ISTREAM.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;DATA : GV_NODE TYPE REF TO IF_IXML_NODE.&lt;/P&gt;&lt;P&gt;DATA : GV_NODETEXT TYPE STRING.&lt;/P&gt;&lt;P&gt;DATA:  GV_FIRST_TIME.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;GV_FIRST_TIME = 'X'.&lt;/P&gt;&lt;P&gt;GV_NODE = DOCUMENT.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;GT_ITEM-ITEM_NO = 1.&lt;/P&gt;&lt;P&gt;PERFORM GET_DATA TABLES     GT_ITEM&lt;/P&gt;&lt;P&gt;                 USING      GV_NODE&lt;/P&gt;&lt;P&gt;                 CHANGING   GV_HEADER.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;Last item is still not added.&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;APPEND GT_ITEM.&lt;/P&gt;&lt;P&gt;WRITE  : GV_HEADER-CUST_NAME,&lt;/P&gt;&lt;P&gt;         GV_HEADER-CARD_NO,&lt;/P&gt;&lt;P&gt;         GV_HEADER-TAX_AMOUNT,&lt;/P&gt;&lt;P&gt;         GV_HEADER-TOTAL_AMOUNT.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;LOOP AT GT_ITEM.&lt;/P&gt;&lt;P&gt;  WRITE  /:.&lt;/P&gt;&lt;P&gt;  WRITE  : GT_ITEM-ITEM_NO,&lt;/P&gt;&lt;P&gt;           GT_ITEM-ITEM_ID,&lt;/P&gt;&lt;P&gt;           GT_ITEM-ITEM_TITLE,&lt;/P&gt;&lt;P&gt;           GT_ITEM-ITEM_QTY,&lt;/P&gt;&lt;P&gt;           GT_ITEM-ITEM_UPRICE.&lt;/P&gt;&lt;P&gt;ENDLOOP.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;*----&lt;/P&gt;&lt;HR originaltext="---------------------------------------------------------------" /&gt;&lt;P&gt;*&lt;/P&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;      FORM Get_data                                                 *&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;*----&lt;/P&gt;&lt;HR originaltext="---------------------------------------------------------------" /&gt;&lt;P&gt;*&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;FORM GET_DATA TABLES   YT_ITEM    STRUCTURE GT_ITEM&lt;/P&gt;&lt;P&gt;              USING VALUE(X_NODE) TYPE REF TO IF_IXML_NODE&lt;/P&gt;&lt;P&gt;              CHANGING Y_HEADER   TYPE TY_HEADER.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;  DATA: INDENT      TYPE I.&lt;/P&gt;&lt;P&gt;  DATA: PTEXT       TYPE REF TO IF_IXML_TEXT.&lt;/P&gt;&lt;P&gt;  DATA: STRING      TYPE STRING.&lt;/P&gt;&lt;P&gt;  DATA: TEMP_STRING(100).&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;  CASE X_NODE-&amp;gt;GET_TYPE( ).&lt;/P&gt;&lt;P&gt;    WHEN IF_IXML_NODE=&amp;gt;CO_NODE_ELEMENT.&lt;/P&gt;&lt;P&gt;      STRING = X_NODE-&amp;gt;GET_NAME( ).&lt;/P&gt;&lt;P&gt;      GV_NODETEXT = STRING.&lt;/P&gt;&lt;P&gt;    WHEN IF_IXML_NODE=&amp;gt;CO_NODE_TEXT.&lt;/P&gt;&lt;P&gt;      PTEXT ?= X_NODE-&amp;gt;QUERY_INTERFACE( IXML_IID_TEXT ).&lt;/P&gt;&lt;P&gt;      IF PTEXT-&amp;gt;WS_ONLY( ) IS INITIAL.&lt;/P&gt;&lt;P&gt;        STRING = X_NODE-&amp;gt;GET_VALUE( ).&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;        CASE GV_NODETEXT.&lt;/P&gt;&lt;P&gt;          WHEN 'Customer'.&lt;/P&gt;&lt;P&gt;            CLEAR GV_HEADER.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;          WHEN 'Name'.&lt;/P&gt;&lt;P&gt;            MOVE STRING TO GV_HEADER-CUST_NAME.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;          WHEN 'Cardnum'.&lt;/P&gt;&lt;P&gt;            MOVE STRING TO GV_HEADER-CARD_NO.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;          WHEN 'Tax'.&lt;/P&gt;&lt;P&gt;            MOVE STRING TO GV_HEADER-TAX_AMOUNT.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;          WHEN 'Total'.&lt;/P&gt;&lt;P&gt;            MOVE STRING TO GV_HEADER-TOTAL_AMOUNT.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;        Iteam details&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;          WHEN 'ID'.&lt;/P&gt;&lt;P&gt;            MOVE STRING TO GT_ITEM-ITEM_ID.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;          WHEN 'Title'.&lt;/P&gt;&lt;P&gt;            MOVE STRING TO TEMP_STRING.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;            MOVE TEMP_STRING TO GT_ITEM-ITEM_TITLE.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;          WHEN 'Quantity'.&lt;/P&gt;&lt;P&gt;            MOVE STRING TO GT_ITEM-ITEM_QTY.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;          WHEN 'UnitPrice'.&lt;/P&gt;&lt;P&gt;            MOVE STRING TO GT_ITEM-ITEM_UPRICE.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;        ENDCASE.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;      ENDIF.&lt;/P&gt;&lt;P&gt;  ENDCASE.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;  IF GV_NODETEXT = 'Customer'.&lt;/P&gt;&lt;P&gt;    CLEAR GV_HEADER.&lt;/P&gt;&lt;P&gt;  ELSEIF GV_NODETEXT = 'Item'.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;    IF GV_FIRST_TIME NE 'X'.&lt;/P&gt;&lt;P&gt;      APPEND GT_ITEM.&lt;/P&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;     clear : gt_item.&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;      GT_ITEM-ITEM_NO = GT_ITEM-ITEM_NO + 1.&lt;/P&gt;&lt;P&gt;    ENDIF.&lt;/P&gt;&lt;P&gt;    GV_FIRST_TIME = ' '.&lt;/P&gt;&lt;P&gt;  ENDIF.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;Get the next child&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;  X_NODE = X_NODE-&amp;gt;GET_FIRST_CHILD( ).&lt;/P&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;Recurse&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;  WHILE NOT X_NODE IS INITIAL.&lt;/P&gt;&lt;P&gt;    PERFORM GET_DATA TABLES     GT_ITEM&lt;/P&gt;&lt;P&gt;                     USING      X_NODE&lt;/P&gt;&lt;P&gt;                     CHANGING   GV_HEADER.&lt;/P&gt;&lt;P&gt;    X_NODE = X_NODE-&amp;gt;GET_NEXT( ).&lt;/P&gt;&lt;P&gt;  ENDWHILE.&lt;/P&gt;&lt;P&gt;ENDFORM.                    "get_data&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
    <pubDate>Thu, 13 Nov 2008 12:51:56 GMT</pubDate>
    <dc:creator>Former Member</dc:creator>
    <dc:date>2008-11-13T12:51:56Z</dc:date>
    <item>
      <title>XML to ABAP</title>
      <link>https://community.sap.com/t5/application-development-and-automation-discussions/xml-to-abap/m-p/4698995#M1104218</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;hello all,&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;my requirement is to read an XML file into a structure of type string, for that i have written an XSLT transformations but when am trying to pass the XML file to the parser am getting run time error saying&lt;/P&gt;&lt;P&gt; &lt;/P&gt;&lt;P&gt;XSLT_BAD_SOURCE_CONTEXT &lt;/P&gt;&lt;P&gt;CX_XSLT_RUNTIME_ERROR &lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;below is the code for calling XSLT program&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;TYPES: BEGIN OF ty_xml_line,&lt;/P&gt;&lt;P&gt;         data(256) TYPE x,&lt;/P&gt;&lt;P&gt;       END OF ty_xml_line.&lt;/P&gt;&lt;P&gt;DATA: gt_in        type table of ty_xml_line,&lt;/P&gt;&lt;P&gt;          gt_out       type string.&lt;/P&gt;&lt;P&gt;DATA: xslt_error   TYPE REF TO cx_xslt_exception,&lt;/P&gt;&lt;P&gt;          xslt_message TYPE string .&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;CALL FUNCTION 'GUI_UPLOAD'&lt;/P&gt;&lt;P&gt;  EXPORTING&lt;/P&gt;&lt;P&gt;    filename = 'T:\Documents and Settings\sgolla\Desktop\xmlorder1.xml'&lt;/P&gt;&lt;P&gt;  TABLES&lt;/P&gt;&lt;P&gt;    data_tab = gt_in.&lt;/P&gt;&lt;P&gt;TRY .&lt;/P&gt;&lt;P&gt;    CALL TRANSFORMATION zord1&lt;/P&gt;&lt;P&gt;  SOURCE XML gt_in&lt;/P&gt;&lt;P&gt;  RESULT xml_output = gt_out .&lt;/P&gt;&lt;P&gt;  CATCH cx_xslt_exception INTO xslt_error.&lt;/P&gt;&lt;P&gt;    xslt_message = xslt_error-&amp;gt;get_text( ).&lt;/P&gt;&lt;P&gt;ENDTRY.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;please help me how to solve it......&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;thx in advance&lt;/P&gt;&lt;P&gt;Sippy.&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Thu, 13 Nov 2008 12:31:45 GMT</pubDate>
      <guid>https://community.sap.com/t5/application-development-and-automation-discussions/xml-to-abap/m-p/4698995#M1104218</guid>
      <dc:creator>Former Member</dc:creator>
      <dc:date>2008-11-13T12:31:45Z</dc:date>
    </item>
    <item>
      <title>Re: XML to ABAP</title>
      <link>https://community.sap.com/t5/application-development-and-automation-discussions/xml-to-abap/m-p/4698996#M1104219</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;REPORT  ZSRK_022                                .&lt;/P&gt;&lt;UL&gt;&lt;UL&gt;&lt;LI level="2" type="ul"&gt;&lt;P&gt;Read XML file from presentation server*&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;Load iXML Lib.&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;TYPE-POOLS: IXML.&lt;/P&gt;&lt;P&gt;CLASS CL_IXML DEFINITION LOAD.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;DATA: G_IXML TYPE REF TO IF_IXML.&lt;/P&gt;&lt;P&gt;DATA: STREAMFACTORY TYPE REF TO IF_IXML_STREAM_FACTORY.&lt;/P&gt;&lt;P&gt;DATA: ISTREAM TYPE REF TO IF_IXML_ISTREAM.&lt;/P&gt;&lt;P&gt;DATA: DOCUMENT TYPE REF TO IF_IXML_DOCUMENT.&lt;/P&gt;&lt;P&gt;DATA: PARSER TYPE REF TO IF_IXML_PARSER.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;DATA: LV_FILE_URL TYPE RLGRAP-FILENAME.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;You should provide the parameter for file name&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;LV_FILE_URL = 'C:input_xml.xml'.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;TYPES: BEGIN OF XML_LINE,&lt;/P&gt;&lt;P&gt;        DATA(256) TYPE X,&lt;/P&gt;&lt;P&gt;      END OF XML_LINE.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;TYPES: BEGIN OF TY_HEADER,&lt;/P&gt;&lt;P&gt;         CUST_NAME(20)     TYPE C,&lt;/P&gt;&lt;P&gt;         CARD_NO(20)       TYPE C,&lt;/P&gt;&lt;P&gt;         TAX_AMOUNT(10)    TYPE C,&lt;/P&gt;&lt;P&gt;         TOTAL_AMOUNT(10)  TYPE C,&lt;/P&gt;&lt;P&gt;       END OF TY_HEADER.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;TYPES: BEGIN OF TY_ITEM,&lt;/P&gt;&lt;P&gt;         ITEM_NO(4)      TYPE N,&lt;/P&gt;&lt;P&gt;         ITEM_ID(20)     TYPE C,&lt;/P&gt;&lt;P&gt;         ITEM_TITLE(50)  TYPE C,&lt;/P&gt;&lt;P&gt;         ITEM_QTY(10)    TYPE C,&lt;/P&gt;&lt;P&gt;         ITEM_UPRICE(10) TYPE C,&lt;/P&gt;&lt;P&gt;       END OF TY_ITEM.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;DATA: GV_HEADER TYPE TY_HEADER.&lt;/P&gt;&lt;P&gt;DATA: GT_ITEM   TYPE STANDARD TABLE OF TY_ITEM   WITH HEADER LINE.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;DATA: XML_TABLE      TYPE TABLE OF XML_LINE,&lt;/P&gt;&lt;P&gt;      XML_TABLE_SIZE TYPE I.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;The next step is creating the main factory for the iXML library:&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;G_IXML = CL_IXML=&amp;gt;CREATE( ).&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;Now Create Stream Factory&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;STREAMFACTORY = G_IXML-&amp;gt;CREATE_STREAM_FACTORY( ).&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;upload a file from the client's workstation&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;CALL FUNCTION 'WS_UPLOAD'&lt;/P&gt;&lt;P&gt;  EXPORTING&lt;/P&gt;&lt;P&gt;    FILENAME   = LV_FILE_URL&lt;/P&gt;&lt;P&gt;    FILETYPE   = 'BIN'&lt;/P&gt;&lt;P&gt;  IMPORTING&lt;/P&gt;&lt;P&gt;    FILELENGTH = XML_TABLE_SIZE&lt;/P&gt;&lt;P&gt;  TABLES&lt;/P&gt;&lt;P&gt;    DATA_TAB   = XML_TABLE&lt;/P&gt;&lt;P&gt;  EXCEPTIONS&lt;/P&gt;&lt;P&gt;    OTHERS     = 11.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;wrap the table containing the file into a stream&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;ISTREAM = STREAMFACTORY-&amp;gt;CREATE_ISTREAM_ITABLE( TABLE = XML_TABLE&lt;/P&gt;&lt;P&gt;                                                SIZE  = XML_TABLE_SIZE ).&lt;/P&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;Create XML Document instance&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;DOCUMENT = G_IXML-&amp;gt;CREATE_DOCUMENT( ).&lt;/P&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;Create parser Object&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;PARSER = G_IXML-&amp;gt;CREATE_PARSER( STREAM_FACTORY = STREAMFACTORY&lt;/P&gt;&lt;P&gt;                                ISTREAM = ISTREAM&lt;/P&gt;&lt;P&gt;                                DOCUMENT = DOCUMENT ).&lt;/P&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;Parse an XML document into a DOM tree&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;*parser-&amp;amp;gtparse( ).&lt;/P&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;Parsing Error Processing&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;IF PARSER-&amp;gt;PARSE( ) NE 0.&lt;/P&gt;&lt;P&gt;  IF PARSER-&amp;gt;NUM_ERRORS( ) NE 0.&lt;/P&gt;&lt;P&gt;    DATA: PARSEERROR TYPE REF TO IF_IXML_PARSE_ERROR,&lt;/P&gt;&lt;P&gt;          STR        TYPE STRING,&lt;/P&gt;&lt;P&gt;          I          TYPE I,&lt;/P&gt;&lt;P&gt;          COUNT      TYPE I,&lt;/P&gt;&lt;P&gt;          INDEX      TYPE I.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;    COUNT = PARSER-&amp;gt;NUM_ERRORS( ).&lt;/P&gt;&lt;P&gt;    WRITE: COUNT, ' parse errors have occured:'.&lt;/P&gt;&lt;P&gt;    INDEX = 0.&lt;/P&gt;&lt;P&gt;    WHILE INDEX &amp;lt; COUNT.&lt;/P&gt;&lt;P&gt;      PARSEERROR = PARSER-&amp;gt;GET_ERROR( INDEX = INDEX ).&lt;/P&gt;&lt;P&gt;      I = PARSEERROR-&amp;gt;GET_LINE( ).&lt;/P&gt;&lt;P&gt;      WRITE: 'line: ', I.&lt;/P&gt;&lt;P&gt;      I = PARSEERROR-&amp;gt;GET_COLUMN( ).&lt;/P&gt;&lt;P&gt;      WRITE: 'column: ', I.&lt;/P&gt;&lt;P&gt;      STR = PARSEERROR-&amp;gt;GET_REASON( ).&lt;/P&gt;&lt;P&gt;      WRITE: STR.&lt;/P&gt;&lt;P&gt;      INDEX = INDEX + 1.&lt;/P&gt;&lt;P&gt;    ENDWHILE.&lt;/P&gt;&lt;P&gt;  ENDIF.&lt;/P&gt;&lt;P&gt;ENDIF.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;Close the stream since it ï¿½s not needed anymore&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;CALL METHOD ISTREAM-&amp;gt;CLOSE( ).&lt;/P&gt;&lt;P&gt;CLEAR ISTREAM.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;DATA : GV_NODE TYPE REF TO IF_IXML_NODE.&lt;/P&gt;&lt;P&gt;DATA : GV_NODETEXT TYPE STRING.&lt;/P&gt;&lt;P&gt;DATA:  GV_FIRST_TIME.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;GV_FIRST_TIME = 'X'.&lt;/P&gt;&lt;P&gt;GV_NODE = DOCUMENT.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;GT_ITEM-ITEM_NO = 1.&lt;/P&gt;&lt;P&gt;PERFORM GET_DATA TABLES     GT_ITEM&lt;/P&gt;&lt;P&gt;                 USING      GV_NODE&lt;/P&gt;&lt;P&gt;                 CHANGING   GV_HEADER.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;Last item is still not added.&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;APPEND GT_ITEM.&lt;/P&gt;&lt;P&gt;WRITE  : GV_HEADER-CUST_NAME,&lt;/P&gt;&lt;P&gt;         GV_HEADER-CARD_NO,&lt;/P&gt;&lt;P&gt;         GV_HEADER-TAX_AMOUNT,&lt;/P&gt;&lt;P&gt;         GV_HEADER-TOTAL_AMOUNT.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;LOOP AT GT_ITEM.&lt;/P&gt;&lt;P&gt;  WRITE  /:.&lt;/P&gt;&lt;P&gt;  WRITE  : GT_ITEM-ITEM_NO,&lt;/P&gt;&lt;P&gt;           GT_ITEM-ITEM_ID,&lt;/P&gt;&lt;P&gt;           GT_ITEM-ITEM_TITLE,&lt;/P&gt;&lt;P&gt;           GT_ITEM-ITEM_QTY,&lt;/P&gt;&lt;P&gt;           GT_ITEM-ITEM_UPRICE.&lt;/P&gt;&lt;P&gt;ENDLOOP.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;*----&lt;/P&gt;&lt;HR originaltext="---------------------------------------------------------------" /&gt;&lt;P&gt;*&lt;/P&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;      FORM Get_data                                                 *&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;*----&lt;/P&gt;&lt;HR originaltext="---------------------------------------------------------------" /&gt;&lt;P&gt;*&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;FORM GET_DATA TABLES   YT_ITEM    STRUCTURE GT_ITEM&lt;/P&gt;&lt;P&gt;              USING VALUE(X_NODE) TYPE REF TO IF_IXML_NODE&lt;/P&gt;&lt;P&gt;              CHANGING Y_HEADER   TYPE TY_HEADER.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;  DATA: INDENT      TYPE I.&lt;/P&gt;&lt;P&gt;  DATA: PTEXT       TYPE REF TO IF_IXML_TEXT.&lt;/P&gt;&lt;P&gt;  DATA: STRING      TYPE STRING.&lt;/P&gt;&lt;P&gt;  DATA: TEMP_STRING(100).&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;  CASE X_NODE-&amp;gt;GET_TYPE( ).&lt;/P&gt;&lt;P&gt;    WHEN IF_IXML_NODE=&amp;gt;CO_NODE_ELEMENT.&lt;/P&gt;&lt;P&gt;      STRING = X_NODE-&amp;gt;GET_NAME( ).&lt;/P&gt;&lt;P&gt;      GV_NODETEXT = STRING.&lt;/P&gt;&lt;P&gt;    WHEN IF_IXML_NODE=&amp;gt;CO_NODE_TEXT.&lt;/P&gt;&lt;P&gt;      PTEXT ?= X_NODE-&amp;gt;QUERY_INTERFACE( IXML_IID_TEXT ).&lt;/P&gt;&lt;P&gt;      IF PTEXT-&amp;gt;WS_ONLY( ) IS INITIAL.&lt;/P&gt;&lt;P&gt;        STRING = X_NODE-&amp;gt;GET_VALUE( ).&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;        CASE GV_NODETEXT.&lt;/P&gt;&lt;P&gt;          WHEN 'Customer'.&lt;/P&gt;&lt;P&gt;            CLEAR GV_HEADER.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;          WHEN 'Name'.&lt;/P&gt;&lt;P&gt;            MOVE STRING TO GV_HEADER-CUST_NAME.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;          WHEN 'Cardnum'.&lt;/P&gt;&lt;P&gt;            MOVE STRING TO GV_HEADER-CARD_NO.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;          WHEN 'Tax'.&lt;/P&gt;&lt;P&gt;            MOVE STRING TO GV_HEADER-TAX_AMOUNT.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;          WHEN 'Total'.&lt;/P&gt;&lt;P&gt;            MOVE STRING TO GV_HEADER-TOTAL_AMOUNT.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;        Iteam details&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;          WHEN 'ID'.&lt;/P&gt;&lt;P&gt;            MOVE STRING TO GT_ITEM-ITEM_ID.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;          WHEN 'Title'.&lt;/P&gt;&lt;P&gt;            MOVE STRING TO TEMP_STRING.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;            MOVE TEMP_STRING TO GT_ITEM-ITEM_TITLE.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;          WHEN 'Quantity'.&lt;/P&gt;&lt;P&gt;            MOVE STRING TO GT_ITEM-ITEM_QTY.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;          WHEN 'UnitPrice'.&lt;/P&gt;&lt;P&gt;            MOVE STRING TO GT_ITEM-ITEM_UPRICE.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;        ENDCASE.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;      ENDIF.&lt;/P&gt;&lt;P&gt;  ENDCASE.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;  IF GV_NODETEXT = 'Customer'.&lt;/P&gt;&lt;P&gt;    CLEAR GV_HEADER.&lt;/P&gt;&lt;P&gt;  ELSEIF GV_NODETEXT = 'Item'.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;    IF GV_FIRST_TIME NE 'X'.&lt;/P&gt;&lt;P&gt;      APPEND GT_ITEM.&lt;/P&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;     clear : gt_item.&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;      GT_ITEM-ITEM_NO = GT_ITEM-ITEM_NO + 1.&lt;/P&gt;&lt;P&gt;    ENDIF.&lt;/P&gt;&lt;P&gt;    GV_FIRST_TIME = ' '.&lt;/P&gt;&lt;P&gt;  ENDIF.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;Get the next child&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;  X_NODE = X_NODE-&amp;gt;GET_FIRST_CHILD( ).&lt;/P&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;Recurse&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;  WHILE NOT X_NODE IS INITIAL.&lt;/P&gt;&lt;P&gt;    PERFORM GET_DATA TABLES     GT_ITEM&lt;/P&gt;&lt;P&gt;                     USING      X_NODE&lt;/P&gt;&lt;P&gt;                     CHANGING   GV_HEADER.&lt;/P&gt;&lt;P&gt;    X_NODE = X_NODE-&amp;gt;GET_NEXT( ).&lt;/P&gt;&lt;P&gt;  ENDWHILE.&lt;/P&gt;&lt;P&gt;ENDFORM.                    "get_data&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Thu, 13 Nov 2008 12:51:56 GMT</pubDate>
      <guid>https://community.sap.com/t5/application-development-and-automation-discussions/xml-to-abap/m-p/4698996#M1104219</guid>
      <dc:creator>Former Member</dc:creator>
      <dc:date>2008-11-13T12:51:56Z</dc:date>
    </item>
  </channel>
</rss>

