Clique aqui caso queira ver o procedimento inverso.
XML: <customers.xml>
<?xml version="1.0" encoding="iso-8859-1" ?>
<CUSTOMERS>
  <PERSON>
    <customer_id>1</customer_id>
    <first_name>Jan</first_name>
    <last_name>Krohn</last_name>
  </PERSON>
  <PERSON>
    <customer_id>2</customer_id>
    <first_name>James</first_name>
    <last_name>Kirk</last_name>
  </PERSON>
</CUSTOMERS>
Programa (SE38):
*-------------------------------------------------------------------*
*  Report Z_XML_TO_ABAP                                             *
*                                                                   *
*-------------------------------------------------------------------*
*  Read the data from an XML file into an ABAP internal table,      *
*  and print it on the screen                                       *
*-------------------------------------------------------------------*
REPORT z_xml_to_abap.
TYPE-POOLS abap.
CONSTANTS gs_file TYPE string VALUE ´C:\temp\customers.xml´.
* This is the structure for the data from the XML file
TYPES: BEGIN OF ts_person,
         cust_id(4)    TYPE n,
         firstname(20) TYPE c,
         lastname(20)  TYPE c,
       END OF ts_person.
* Table for the XML content
DATA: gt_itab       TYPE STANDARD TABLE OF char2048.
* Table and work ares for the data from the XML file
DATA: gt_person     TYPE STANDARD TABLE OF ts_person,
      gs_person     TYPE ts_person.
* Result table that contains references
* of the internal tables to be filled
DATA: gt_result_xml TYPE abap_trans_resbind_tab,
      gs_result_xml TYPE abap_trans_resbind.
* For error handling
DATA: gs_rif_ex     TYPE REF TO cx_root,
      gs_var_text   TYPE string.
* Get the XML file from your client
CALL METHOD cl_gui_frontend_services=>gui_upload
  EXPORTING
    filename                = gs_file
  CHANGING
    data_tab                = gt_itab
  EXCEPTIONS
    file_open_error         = 1
    file_read_error         = 2
    no_batch                = 3
    gui_refuse_filetransfer = 4
    invalid_type            = 5
    no_authority            = 6
    unknown_error           = 7
    bad_data_format         = 8
    header_not_allowed      = 9
    separator_not_allowed   = 10
    header_too_long         = 11
    unknown_dp_error        = 12
    access_denied           = 13
    dp_out_of_memory        = 14
    disk_full               = 15
    dp_timeout              = 16
    not_supported_by_gui    = 17
    error_no_gui            = 18
    OTHERS                  = 19.
IF sy-subrc <> 0.
  MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
          WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
ENDIF.
* Fill the result table with a reference to the data table.
* Within the XSLT stylesheet, the data table can be accessed with
* "IPERSON".
GET REFERENCE OF gt_person INTO gs_result_xml-value.
gs_result_xml-name = ´IPERSON´.
APPEND gs_result_xml TO gt_result_xml.
* Perform the XSLT stylesheet
TRY.
    CALL TRANSFORMATION z_xml_to_abap
    SOURCE XML gt_itab
    RESULT (gt_result_xml).
CATCH cx_root INTO gs_rif_ex.
    gs_var_text = gs_rif_ex->get_text( ).
    MESSAGE gs_var_text TYPE ´E´.
ENDTRY.
* Now let´s see what we got from the file
LOOP AT gt_person INTO gs_person.
  WRITE: / ´Customer ID:´, gs_person-cust_id.
  WRITE: / ´First name :´, gs_person-firstname.
  WRITE: / ´Last name  :´, gs_person-lastname.
  WRITE : /.
ENDLOOP. "gt_person.
Transformation (STRANS): <z_xml_to_abap>
<xsl:transform xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
  <xsl:output encoding="iso-8859-1" indent="yes" method="xml" version="1.0"/>
  <xsl:strip-space elements="*"/>
  <xsl:template match="/">
    <asx:abap xmlns:asx="http://www.sap.com/abapxml" version="1.0">
      <asx:values>
        <IPERSON>
          <xsl:apply-templates select="//PERSON"/>
        </IPERSON>
      </asx:values>
    </asx:abap>
  </xsl:template>
  <xsl:template match="PERSON">
    <item>
      <CUST_ID>
        <xsl:value-of select="customer_id"/>
      </CUST_ID>
      <FIRSTNAME>
        <xsl:value-of select="first_name"/>
      </FIRSTNAME>
      <LASTNAME>
        <xsl:value-of select="last_name"/>
      </LASTNAME>
    </item>
  </xsl:template>
</xsl:transform>
Post Original
Nenhum comentário:
Postar um comentário