<?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 generation with SAP data using XML schema - Reg in Application Development and Automation Discussions</title>
    <link>https://community.sap.com/t5/application-development-and-automation-discussions/xml-generation-with-sap-data-using-xml-schema-reg/m-p/2318682#M508754</link>
    <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;please  try this  same program    and see  it .... &lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;PRE&gt;&lt;CODE&gt;*&amp;amp;---------------------------------------------------------------------*
*&amp;amp; Report  z_xit_xml_check
*&amp;amp;---------------------------------------------------------------------*
  REPORT  z_xit_xml_check.

  TYPE-POOLS: ixml.

  TYPES: BEGIN OF t_xml_line,
          data(256) TYPE x,
        END OF t_xml_line.

  DATA: l_ixml            TYPE REF TO if_ixml,
        l_streamfactory   TYPE REF TO if_ixml_stream_factory,
        l_parser          TYPE REF TO if_ixml_parser,
        l_istream         TYPE REF TO if_ixml_istream,
        l_document        TYPE REF TO if_ixml_document,
        l_node            TYPE REF TO if_ixml_node,
        l_xmldata         TYPE string.

  DATA: l_elem            TYPE REF TO if_ixml_element,
        l_root_node       TYPE REF TO if_ixml_node,
        l_next_node       TYPE REF TO if_ixml_node,
        l_name            TYPE string,
        l_iterator        TYPE REF TO if_ixml_node_iterator.

  DATA: l_xml_table       TYPE TABLE OF t_xml_line,
        l_xml_line        TYPE t_xml_line,
        l_xml_table_size  TYPE i.
  DATA: l_filename        TYPE string.


  PARAMETERS: pa_file TYPE char1024 DEFAULT 'c:temporders_dtd.xml'.
* Validation of XML file: Only DTD included in xml document is supported
  PARAMETERS: pa_val  TYPE char1 AS CHECKBOX.

  START-OF-SELECTION.

*   Creating the main iXML factory
    l_ixml = cl_ixml=&amp;gt;create( ).

*   Creating a stream factory
    l_streamfactory = l_ixml-&amp;gt;create_stream_factory( ).

    PERFORM get_xml_table CHANGING l_xml_table_size l_xml_table.


*   wrap the table containing the file into a stream
    l_istream = l_streamfactory-&amp;gt;create_istream_itable( table = l_xml_table
                                                    size  = l_xml_table_size ).

*   Creating a document
    l_document = l_ixml-&amp;gt;create_document( ).

*   Create a Parser
    l_parser = l_ixml-&amp;gt;create_parser( stream_factory = l_streamfactory
                                      istream        = l_istream
                                      document       = l_document ).

*   Validate a document
    IF pa_val EQ 'X'.
      l_parser-&amp;gt;set_validating( mode = if_ixml_parser=&amp;gt;co_validate ).
    ENDIF.

*   Parse the stream
    IF l_parser-&amp;gt;parse( ) NE 0.
      IF l_parser-&amp;gt;num_errors( ) NE 0.
        DATA: parseerror TYPE REF TO if_ixml_parse_error,
              str        TYPE string,
              i          TYPE i,
              count      TYPE i,
              index      TYPE i.

        count = l_parser-&amp;gt;num_errors( ).
        WRITE: count, ' parse errors have occured:'.
        index = 0.
        WHILE index &amp;lt; count.
          parseerror = l_parser-&amp;gt;get_error( index = index ).
          i = parseerror-&amp;gt;get_line( ).
          WRITE: 'line: ', i.
          i = parseerror-&amp;gt;get_column( ).
          WRITE: 'column: ', i.
          str = parseerror-&amp;gt;get_reason( ).
          WRITE: str.
          index = index + 1.
        ENDWHILE.
      ENDIF.
    ENDIF.

*   Process the document
    IF l_parser-&amp;gt;is_dom_generating( ) EQ 'X'.
      PERFORM process_dom USING l_document.
    ENDIF.


*&amp;amp;--------------------------------------------------------------------*
*&amp;amp;      Form  get_xml_table
*&amp;amp;--------------------------------------------------------------------*
  FORM get_xml_table CHANGING l_xml_table_size TYPE i
                              l_xml_table      TYPE STANDARD TABLE.

*   Local variable declaration
    DATA: l_len      TYPE i,
          l_len2     TYPE i,
          l_tab      TYPE tsfixml,
          l_content  TYPE string,
          l_str1     TYPE string,
          c_conv     TYPE REF TO cl_abap_conv_in_ce,
          l_itab     TYPE TABLE OF string.


    l_filename = pa_file.
*   upload a file from the client's workstation
    CALL METHOD cl_gui_frontend_services=&amp;gt;gui_upload
      EXPORTING
        filename   = l_filename
        filetype   = 'BIN'
      IMPORTING
        filelength = l_xml_table_size
      CHANGING
        data_tab   = l_xml_table
      EXCEPTIONS
        OTHERS     = 19.
    IF sy-subrc &amp;lt;&amp;gt; 0.
      MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
                 WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
    ENDIF.

*   Writing the XML document to the screen
    CLEAR l_str1.
    LOOP AT l_xml_table INTO l_xml_line.
      c_conv = cl_abap_conv_in_ce=&amp;gt;create( input = l_xml_line-data replacement = space  ).
      c_conv-&amp;gt;read( IMPORTING data = l_content len = l_len ).
      CONCATENATE l_str1 l_content INTO l_str1.
    ENDLOOP.
    l_str1 = l_str1+0(l_xml_table_size).
    SPLIT l_str1 AT cl_abap_char_utilities=&amp;gt;cr_lf INTO TABLE l_itab.
    WRITE: /.
    WRITE: /' XML File'.
    WRITE: /.
    LOOP AT l_itab INTO l_str1.
      REPLACE ALL OCCURRENCES OF cl_abap_char_utilities=&amp;gt;horizontal_tab IN
        l_str1 WITH space.
      WRITE: / l_str1.
    ENDLOOP.
    WRITE: /.
  ENDFORM.                    "get_xml_table

*&amp;amp;--------------------------------------------------------------------*
*&amp;amp;      Form  process_dom
*&amp;amp;--------------------------------------------------------------------*
  FORM process_dom USING document TYPE REF TO if_ixml_document.

    DATA: node      TYPE REF TO if_ixml_node,
          iterator  TYPE REF TO if_ixml_node_iterator,
          nodemap   TYPE REF TO if_ixml_named_node_map,
          attr      TYPE REF TO if_ixml_node,
          name      TYPE string,
          prefix    TYPE string,
          value     TYPE string,
          indent    TYPE i,
          count     TYPE i,
          index     TYPE i.


    node ?= document.

    CHECK NOT node IS INITIAL.

    ULINE.
    WRITE: /.
    WRITE: /' DOM-TREE'.
    WRITE: /.
    IF node IS INITIAL. EXIT. ENDIF.
*   create a node iterator
    iterator  = node-&amp;gt;create_iterator( ).
*   get current node
    node = iterator-&amp;gt;get_next( ).

*   loop over all nodes
    WHILE NOT node IS INITIAL.
      indent = node-&amp;gt;get_height( ) * 2.
      indent = indent + 20.

      CASE node-&amp;gt;get_type( ).
        WHEN if_ixml_node=&amp;gt;co_node_element.
*         element node
          name    = node-&amp;gt;get_name( ).
          nodemap = node-&amp;gt;get_attributes( ).
          WRITE: / 'ELEMENT  :'.
          WRITE: AT indent name COLOR COL_POSITIVE INVERSE.
          IF NOT nodemap IS INITIAL.
*           attributes
            count = nodemap-&amp;gt;get_length( ).
            DO count TIMES.
              index  = sy-index - 1.
              attr   = nodemap-&amp;gt;get_item( index ).
              name   = attr-&amp;gt;get_name( ).
              prefix = attr-&amp;gt;get_namespace_prefix( ).
              value  = attr-&amp;gt;get_value( ).
              WRITE: / 'ATTRIBUTE:'.
              WRITE: AT indent name  COLOR COL_HEADING INVERSE, '=',
                               value COLOR COL_TOTAL   INVERSE.
            ENDDO.
          ENDIF.
        WHEN if_ixml_node=&amp;gt;co_node_text OR
             if_ixml_node=&amp;gt;co_node_cdata_section.
*         text node
          value  = node-&amp;gt;get_value( ).
          WRITE: / 'VALUE     :'.
          WRITE: AT indent value COLOR COL_GROUP INVERSE.
      ENDCASE.
*     advance to next node
      node = iterator-&amp;gt;get_next( ).
    ENDWHILE.
  ENDFORM.                    "process_dom&lt;/CODE&gt;&lt;/PRE&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;reward  points  if it is use fulll ....&lt;/P&gt;&lt;P&gt;Girish&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
    <pubDate>Thu, 31 May 2007 10:20:03 GMT</pubDate>
    <dc:creator>Former Member</dc:creator>
    <dc:date>2007-05-31T10:20:03Z</dc:date>
    <item>
      <title>XML generation with SAP data using XML schema - Reg</title>
      <link>https://community.sap.com/t5/application-development-and-automation-discussions/xml-generation-with-sap-data-using-xml-schema-reg/m-p/2318680#M508752</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Hello experts,&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;  My requirement is , SAP( ztable data )  data has to be transferred to third party software folder.Third party using XML so they requires output from SAP in XML format.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;For that third party software guys told me that they will give their own XML schema to me.I have to generate XML file with SAP data using their XML schema.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Generating XML file with their Schema should be underlined.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;I studied that call transformation statement helps for this.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Even then i don't have clear idea about this topic.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Please brief me about how to use their XML schema to generate XML with my own sap data.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Thanks in advance experts.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Kumar&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Thu, 31 May 2007 09:25:39 GMT</pubDate>
      <guid>https://community.sap.com/t5/application-development-and-automation-discussions/xml-generation-with-sap-data-using-xml-schema-reg/m-p/2318680#M508752</guid>
      <dc:creator>Former Member</dc:creator>
      <dc:date>2007-05-31T09:25:39Z</dc:date>
    </item>
    <item>
      <title>Re: XML generation with SAP data using XML schema - Reg</title>
      <link>https://community.sap.com/t5/application-development-and-automation-discussions/xml-generation-with-sap-data-using-xml-schema-reg/m-p/2318681#M508753</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;/people/r.eijpe/blog/2005/11/21/xml-dom-processing-in-abap-part-ii--convert-an-xml-file-into-an-abap-table-using-sap-dom-approach&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;/people/r.eijpe/blog/2005/11/10/xml-dom-processing-in-abap-part-i--convert-an-abap-table-into-xml-file-using-sap-dom-approach&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;reward with points if its helpful&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Thu, 31 May 2007 09:32:03 GMT</pubDate>
      <guid>https://community.sap.com/t5/application-development-and-automation-discussions/xml-generation-with-sap-data-using-xml-schema-reg/m-p/2318681#M508753</guid>
      <dc:creator>Former Member</dc:creator>
      <dc:date>2007-05-31T09:32:03Z</dc:date>
    </item>
    <item>
      <title>Re: XML generation with SAP data using XML schema - Reg</title>
      <link>https://community.sap.com/t5/application-development-and-automation-discussions/xml-generation-with-sap-data-using-xml-schema-reg/m-p/2318682#M508754</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;please  try this  same program    and see  it .... &lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;PRE&gt;&lt;CODE&gt;*&amp;amp;---------------------------------------------------------------------*
*&amp;amp; Report  z_xit_xml_check
*&amp;amp;---------------------------------------------------------------------*
  REPORT  z_xit_xml_check.

  TYPE-POOLS: ixml.

  TYPES: BEGIN OF t_xml_line,
          data(256) TYPE x,
        END OF t_xml_line.

  DATA: l_ixml            TYPE REF TO if_ixml,
        l_streamfactory   TYPE REF TO if_ixml_stream_factory,
        l_parser          TYPE REF TO if_ixml_parser,
        l_istream         TYPE REF TO if_ixml_istream,
        l_document        TYPE REF TO if_ixml_document,
        l_node            TYPE REF TO if_ixml_node,
        l_xmldata         TYPE string.

  DATA: l_elem            TYPE REF TO if_ixml_element,
        l_root_node       TYPE REF TO if_ixml_node,
        l_next_node       TYPE REF TO if_ixml_node,
        l_name            TYPE string,
        l_iterator        TYPE REF TO if_ixml_node_iterator.

  DATA: l_xml_table       TYPE TABLE OF t_xml_line,
        l_xml_line        TYPE t_xml_line,
        l_xml_table_size  TYPE i.
  DATA: l_filename        TYPE string.


  PARAMETERS: pa_file TYPE char1024 DEFAULT 'c:temporders_dtd.xml'.
* Validation of XML file: Only DTD included in xml document is supported
  PARAMETERS: pa_val  TYPE char1 AS CHECKBOX.

  START-OF-SELECTION.

*   Creating the main iXML factory
    l_ixml = cl_ixml=&amp;gt;create( ).

*   Creating a stream factory
    l_streamfactory = l_ixml-&amp;gt;create_stream_factory( ).

    PERFORM get_xml_table CHANGING l_xml_table_size l_xml_table.


*   wrap the table containing the file into a stream
    l_istream = l_streamfactory-&amp;gt;create_istream_itable( table = l_xml_table
                                                    size  = l_xml_table_size ).

*   Creating a document
    l_document = l_ixml-&amp;gt;create_document( ).

*   Create a Parser
    l_parser = l_ixml-&amp;gt;create_parser( stream_factory = l_streamfactory
                                      istream        = l_istream
                                      document       = l_document ).

*   Validate a document
    IF pa_val EQ 'X'.
      l_parser-&amp;gt;set_validating( mode = if_ixml_parser=&amp;gt;co_validate ).
    ENDIF.

*   Parse the stream
    IF l_parser-&amp;gt;parse( ) NE 0.
      IF l_parser-&amp;gt;num_errors( ) NE 0.
        DATA: parseerror TYPE REF TO if_ixml_parse_error,
              str        TYPE string,
              i          TYPE i,
              count      TYPE i,
              index      TYPE i.

        count = l_parser-&amp;gt;num_errors( ).
        WRITE: count, ' parse errors have occured:'.
        index = 0.
        WHILE index &amp;lt; count.
          parseerror = l_parser-&amp;gt;get_error( index = index ).
          i = parseerror-&amp;gt;get_line( ).
          WRITE: 'line: ', i.
          i = parseerror-&amp;gt;get_column( ).
          WRITE: 'column: ', i.
          str = parseerror-&amp;gt;get_reason( ).
          WRITE: str.
          index = index + 1.
        ENDWHILE.
      ENDIF.
    ENDIF.

*   Process the document
    IF l_parser-&amp;gt;is_dom_generating( ) EQ 'X'.
      PERFORM process_dom USING l_document.
    ENDIF.


*&amp;amp;--------------------------------------------------------------------*
*&amp;amp;      Form  get_xml_table
*&amp;amp;--------------------------------------------------------------------*
  FORM get_xml_table CHANGING l_xml_table_size TYPE i
                              l_xml_table      TYPE STANDARD TABLE.

*   Local variable declaration
    DATA: l_len      TYPE i,
          l_len2     TYPE i,
          l_tab      TYPE tsfixml,
          l_content  TYPE string,
          l_str1     TYPE string,
          c_conv     TYPE REF TO cl_abap_conv_in_ce,
          l_itab     TYPE TABLE OF string.


    l_filename = pa_file.
*   upload a file from the client's workstation
    CALL METHOD cl_gui_frontend_services=&amp;gt;gui_upload
      EXPORTING
        filename   = l_filename
        filetype   = 'BIN'
      IMPORTING
        filelength = l_xml_table_size
      CHANGING
        data_tab   = l_xml_table
      EXCEPTIONS
        OTHERS     = 19.
    IF sy-subrc &amp;lt;&amp;gt; 0.
      MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
                 WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
    ENDIF.

*   Writing the XML document to the screen
    CLEAR l_str1.
    LOOP AT l_xml_table INTO l_xml_line.
      c_conv = cl_abap_conv_in_ce=&amp;gt;create( input = l_xml_line-data replacement = space  ).
      c_conv-&amp;gt;read( IMPORTING data = l_content len = l_len ).
      CONCATENATE l_str1 l_content INTO l_str1.
    ENDLOOP.
    l_str1 = l_str1+0(l_xml_table_size).
    SPLIT l_str1 AT cl_abap_char_utilities=&amp;gt;cr_lf INTO TABLE l_itab.
    WRITE: /.
    WRITE: /' XML File'.
    WRITE: /.
    LOOP AT l_itab INTO l_str1.
      REPLACE ALL OCCURRENCES OF cl_abap_char_utilities=&amp;gt;horizontal_tab IN
        l_str1 WITH space.
      WRITE: / l_str1.
    ENDLOOP.
    WRITE: /.
  ENDFORM.                    "get_xml_table

*&amp;amp;--------------------------------------------------------------------*
*&amp;amp;      Form  process_dom
*&amp;amp;--------------------------------------------------------------------*
  FORM process_dom USING document TYPE REF TO if_ixml_document.

    DATA: node      TYPE REF TO if_ixml_node,
          iterator  TYPE REF TO if_ixml_node_iterator,
          nodemap   TYPE REF TO if_ixml_named_node_map,
          attr      TYPE REF TO if_ixml_node,
          name      TYPE string,
          prefix    TYPE string,
          value     TYPE string,
          indent    TYPE i,
          count     TYPE i,
          index     TYPE i.


    node ?= document.

    CHECK NOT node IS INITIAL.

    ULINE.
    WRITE: /.
    WRITE: /' DOM-TREE'.
    WRITE: /.
    IF node IS INITIAL. EXIT. ENDIF.
*   create a node iterator
    iterator  = node-&amp;gt;create_iterator( ).
*   get current node
    node = iterator-&amp;gt;get_next( ).

*   loop over all nodes
    WHILE NOT node IS INITIAL.
      indent = node-&amp;gt;get_height( ) * 2.
      indent = indent + 20.

      CASE node-&amp;gt;get_type( ).
        WHEN if_ixml_node=&amp;gt;co_node_element.
*         element node
          name    = node-&amp;gt;get_name( ).
          nodemap = node-&amp;gt;get_attributes( ).
          WRITE: / 'ELEMENT  :'.
          WRITE: AT indent name COLOR COL_POSITIVE INVERSE.
          IF NOT nodemap IS INITIAL.
*           attributes
            count = nodemap-&amp;gt;get_length( ).
            DO count TIMES.
              index  = sy-index - 1.
              attr   = nodemap-&amp;gt;get_item( index ).
              name   = attr-&amp;gt;get_name( ).
              prefix = attr-&amp;gt;get_namespace_prefix( ).
              value  = attr-&amp;gt;get_value( ).
              WRITE: / 'ATTRIBUTE:'.
              WRITE: AT indent name  COLOR COL_HEADING INVERSE, '=',
                               value COLOR COL_TOTAL   INVERSE.
            ENDDO.
          ENDIF.
        WHEN if_ixml_node=&amp;gt;co_node_text OR
             if_ixml_node=&amp;gt;co_node_cdata_section.
*         text node
          value  = node-&amp;gt;get_value( ).
          WRITE: / 'VALUE     :'.
          WRITE: AT indent value COLOR COL_GROUP INVERSE.
      ENDCASE.
*     advance to next node
      node = iterator-&amp;gt;get_next( ).
    ENDWHILE.
  ENDFORM.                    "process_dom&lt;/CODE&gt;&lt;/PRE&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;reward  points  if it is use fulll ....&lt;/P&gt;&lt;P&gt;Girish&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Thu, 31 May 2007 10:20:03 GMT</pubDate>
      <guid>https://community.sap.com/t5/application-development-and-automation-discussions/xml-generation-with-sap-data-using-xml-schema-reg/m-p/2318682#M508754</guid>
      <dc:creator>Former Member</dc:creator>
      <dc:date>2007-05-31T10:20:03Z</dc:date>
    </item>
  </channel>
</rss>

