zoukankan      html  css  js  c++  java
  • 一个简单的创建xml方式

    DATA: BEGIN OF itab_matnr OCCURS 0 ,
            matnr LIKE mara-matnr ,
            maktx LIKE makt-maktx ,
          END OF itab_matnr .
    DATA: BEGIN OF itab_class OCCURS 0 ,
            class LIKE m_wwgha-class,"部门
            kschl LIKE m_wwgha-kschl,"DESC
          END OF itab_class .
    DATA: l_ixml TYPE REF TO if_ixml,
          l_encoding TYPE REF TO if_ixml_encoding,
          l_comment TYPE REF TO if_ixml_comment,
          l_doc TYPE REF TO if_ixml_document,
          l_root TYPE REF TO if_ixml_element,
          l_item TYPE REF TO if_ixml_element,
          l_element TYPE REF TO if_ixml_element,
          l_attribute TYPE REF TO if_ixml_attribute,
          l_ostream TYPE REF TO if_ixml_ostream,
          l_factory  TYPE REF TO if_ixml_stream_factory.
    TYPES: BEGIN OF xml_line,
            data(256) TYPE x,
          END OF xml_line.
    DATA: xml_table TYPE TABLE OF xml_line,
          xml_size  TYPE i.
    DATA: l_rval TYPE i.
    START-OF-SELECTION.
      PERFORM getdata.
      PERFORM create_xml.
      PERFORM download.
    *---------------------------------------------------------------------*
    *       FORM getdata                                                  *
    *---------------------------------------------------------------------*
    FORM getdata.
      SELECT matnr maktx FROM makt
      INTO TABLE itab_matnr
      UP TO 4 ROWS
      WHERE spras = '1' .
      SELECT class kschl FROM m_wwgha
      INTO TABLE itab_class
      UP TO 4 ROWS
      WHERE spras IN ('1','E') .
      DELETE itab_class WHERE class = '0'.
      APPEND itab_class. "演示空数据
    ENDFORM.
    *---------------------------------------------------------------------*
    *       FORM create_xml                                               *
    *---------------------------------------------------------------------*
    FORM create_xml.
      CLASS cl_ixml DEFINITION LOAD.
      l_ixml = cl_ixml=>create( ).
      CALL METHOD l_ixml->create_encoding
        EXPORTING
          byte_order    = 0
          character_set = 'gb2312'
        RECEIVING
          rval          = l_encoding .
      CALL METHOD l_ixml->create_document
        RECEIVING
          rval   = l_doc .
      CALL METHOD l_doc->set_encoding
        EXPORTING
          encoding = l_encoding  .
      CALL METHOD l_doc->create_simple_element
         EXPORTING
           name      = 'Root'
           parent    = l_doc
         RECEIVING
           rval      = l_root .
      CALL METHOD l_root->set_attribute
        EXPORTING
          name      = 'ATTRIBUTE'
          value     = 'sample'
        RECEIVING
          rval      = l_rval .
      CALL METHOD  l_doc->create_comment
        EXPORTING
          comment = '''上面ATTRIBUTE为属性示例'''
        RECEIVING
          rval    = l_comment  .
      CALL METHOD l_root->append_child
        EXPORTING
          new_child = l_comment
        RECEIVING
          rval      = l_rval.
      PERFORM fill_itab2xml TABLES  itab_matnr
                            USING   'Products'
                                    'Product'
                                    l_root.
      PERFORM fill_itab2xml TABLES  itab_class
                            USING   'Categories'
                                    'Categorie'
                                    l_root.
      CALL METHOD l_ixml->create_stream_factory
        RECEIVING
          rval   = l_factory  .
      CALL METHOD l_factory->create_ostream_itable
        EXPORTING
          table  = xml_table
        RECEIVING
          rval   = l_ostream  .
      CALL METHOD l_doc->render
        EXPORTING
          ostream   =   l_ostream
          recursive = 'X'  .
      CALL METHOD l_ostream->get_num_written_raw
        RECEIVING
          rval   = xml_size .
    ENDFORM.
    *---------------------------------------------------------------------*
    *       FORM download                                                 *
    *---------------------------------------------------------------------*
    FORM download.
      CALL FUNCTION 'GUI_DOWNLOAD'
           EXPORTING
                bin_filesize = xml_size
                filename     = 'C:ECC6.XML'
                filetype     = 'BIN'
           TABLES
                data_tab     = xml_table.
    ENDFORM.
    *---------------------------------------------------------------------*
    *       FORM fill_itab                                                *
    *---------------------------------------------------------------------*
    FORM fill_itab2xml TABLES intab
                       USING node1name TYPE string
                             node2name TYPE string
                             l_parent TYPE REF TO if_ixml_element.
      DATA: BEGIN OF headtab OCCURS 0 ,
              length    TYPE i ,
              decimals  TYPE i,
              type_kind TYPE c,
              name(30)  TYPE c,
            END OF headtab.
      DATA descr_ref TYPE REF TO cl_abap_structdescr.
      FIELD-SYMBOLS: <comp_wa> TYPE abap_compdescr ,
                     <f_field> ,
                     <f_intab> TYPE ANY .
      DATA: n TYPE i ,
            str TYPE string ,
            itemname TYPE string ,
            text1 TYPE c ,
            l_node TYPE REF TO if_ixml_element ,
            l_item TYPE REF TO if_ixml_element .
      descr_ref ?= cl_abap_typedescr=>describe_by_data( intab ).
      LOOP AT descr_ref->components ASSIGNING <comp_wa>.
        MOVE-CORRESPONDING <comp_wa> TO headtab.
        APPEND headtab.
      ENDLOOP.
      CALL METHOD l_doc->create_simple_element
          EXPORTING
            name      = node1name
            parent    = l_parent
          RECEIVING
            rval      = l_node  .
      DESCRIBE TABLE headtab LINES n.
      LOOP AT intab ASSIGNING <f_intab>.
        CALL METHOD l_doc->create_simple_element
          EXPORTING
            name      = node2name
            parent    = l_node
          RECEIVING
            rval      = l_item  .
        DO n TIMES.
          ASSIGN COMPONENT sy-index OF STRUCTURE <f_intab> TO <f_field>.
          str = <f_field>.
          READ TABLE headtab INDEX sy-index.
          IF headtab-type_kind = 'I' OR headtab-type_kind = 'P'
                                     OR headtab-type_kind = 'F'.
            SEARCH str FOR '-'.
            IF sy-subrc = 0 AND sy-fdpos <> 0.
              SPLIT str AT '-' INTO str text1.
              CONDENSE str.
              CONCATENATE '-' str INTO str.
            ELSE.
              CONDENSE str.
            ENDIF.
          ELSE.
    *        SHIFT str LEFT DELETING LEADING '0' .
          ENDIF.
          itemname = headtab-name .
          CALL METHOD l_doc->create_simple_element
            EXPORTING
              name      = itemname
              parent    = l_item
              value     = str
            RECEIVING
              rval      = l_element .
        ENDDO.
      ENDLOOP.
    ENDFORM.
  • 相关阅读:
    (引)spring学习笔记1.什么是控制反转
    Arduino 各种模块篇 步进电机 step motor 舵机 servo 直流电机 总复习
    Raspberry Pi Wireless Adaptor
    Pyramid 使用总结1
    Arduino 各种模块篇 人体红外感应模块 proximity sensor
    Pyramid 使用总结2
    Webcam Streaming Desktop Recording on Linux for ubuntu or its destros
    Arduino 各种模块篇 步进电机 step motor( 不用库,不用shield, 纯)
    Arduino 各种模块篇 motor shield 电机扩展板(舵机、直流电机、步进电机party)
    转载 stepper motors
  • 原文地址:https://www.cnblogs.com/caizjian/p/8845936.html
Copyright © 2011-2022 走看看