• 一个简单的创建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.
  • 相关阅读:
    The C++ Source A Pause to Reflect: Five Lists of Five, Part I The Most Important C++ Books...Ever
    Cg 1.5 Released
    Half Life 2 Source 引擎介绍
    一大清早去飙车
    [旧闻一]NVIDIA招揽前Intel顶级CPU设计师
    [旧闻二]AMD收购ATI
    【翻译】[Effective C++第三版•中文版][第17条]要在单独的语句中使用智能指针来存储由new创建的对象
    Generic:简化异常安全代码
    第29条: 力求使代码做到“异常安全”
    Linux压缩打包命令使用方法
  • 原文地址:https://www.cnblogs.com/caizjian/p/8845936.html
Copyright © 2020-2023  润新知