#1
|
|||
|
|||
Xml - Abap
Buen día a todos, les escribía para pedir ayuda respecto a como levantar un archivo ".xml" desde abap de modo tal de insertar los datos en una tabla interna. Desde ya muchas gracias por su colaboración. Saludos Cordiales.
Claudio |
#2
|
|||
|
|||
Haber, encontré este ejemplo en internet, lo he testeado y si funciona. Ojalá pueda ayudartre con eso.
Crea tu archivo con extensión 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> Este es el Codigo ABAP que se necesita. REPORT ZTT. TYPE-POOLS abap. CONSTANTS gs_file TYPE string VALUE 'C:\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. Ten presente de que antes de que actives el programa deberas crear el XSLT y eso lo haras haciendo doble clic en la linea del "CALL TRANSFORMATION z_xml_to_abap", seleccionas XSLT y luego pegas el XSLT debajo. <xsl:transform xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0"> <xslutput 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> Activas el programa y debe funcionar. Espero haberte podido ayudar. Saludos. |
Herramientas | Buscar en Tema |
Desplegado | |
|
|