*&---------------------------------------------------------------------*
*& Report  Z_BARRY_TEST_XML
*&---------------------------------------------------------------------*
*& 46C - ECC6 通用
*&---------------------------------------------------------------------*
REPORT  z_barry_test_xml.
TYPES: BEGIN OF ty_item ,
         ebelp LIKE ekpo-ebelp ,
         menge LIKE ekpo-menge ,
       END OF ty_item .
TYPES tt_item TYPE STANDARD TABLE OF ty_item WITH DEFAULT KEY  .
DATA: itab_item TYPE STANDARD TABLE OF ty_item WITH HEADER LINE  ,
      wa_item LIKE LINE OF itab_item.
TYPES: BEGIN OF ty_po ,
         ebeln LIKE ekko-ebeln ,
         aedat LIKE ekko-aedat ,
         item TYPE tt_item ,
       END OF ty_po .
DATA: itab_po TYPE STANDARD TABLE OF ty_po WITH HEADER LINE  .
DATA: BEGIN OF itab_all OCCURS 0 ,
        ebeln LIKE ekko-ebeln ,
        aedat LIKE ekko-aedat ,
        ebelp LIKE ekpo-ebelp ,
        menge LIKE ekpo-menge ,
      END OF itab_all.
DATA: tmpebeln LIKE ekko-ebeln.
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_po   TYPE REF TO if_ixml_element,
      l_pohead 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.
DATA: str TYPE string .
SELECT-OPTIONS : s_ebeln FOR itab_all-ebeln.
START-OF-SELECTION.
  PERFORM getdata.
  PERFORM create_xml.
  PERFORM download.
*---------------------------------------------------------------------*
*       FORM getdata                                                  *
*---------------------------------------------------------------------*
FORM getdata.
  SELECT ekko~ebeln ekko~aedat ekpo~ebelp ekpo~menge
  INTO TABLE itab_all
  FROM ekko INNER JOIN ekpo ON ekko~ebeln = ekpo~ebeln
  WHERE ekko~ebeln IN s_ebeln.
  SORT itab_all BY ebeln ebelp.
  LOOP AT itab_all .
    ON CHANGE OF itab_all-ebeln .
      CLEAR itab_po-item .
      CLEAR tmpebeln .
      tmpebeln = itab_all-ebeln .
      LOOP AT itab_all WHERE ebeln = tmpebeln .
        wa_item-ebelp = itab_all-ebelp .
        wa_item-menge = itab_all-menge .
        APPEND wa_item TO itab_po-item .
      ENDLOOP .
      SORT itab_po-item BY ebelp.
      itab_po-ebeln = itab_all-ebeln .
      itab_po-aedat = itab_all-aedat .
      APPEND itab_po .
    ENDON .
  ENDLOOP .
ENDFORM.                    "getdata
*---------------------------------------------------------------------*
*       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.
  LOOP AT itab_po.
    CALL METHOD l_doc->create_simple_element
      EXPORTING
        name   = 'po'
        parent = l_root
      RECEIVING
        rval   = l_po.
    CALL METHOD l_doc->create_simple_element
    EXPORTING
      name   = 'pohead'
      parent = l_po
    RECEIVING
      rval   = l_pohead.
    str = itab_po-ebeln .
    CALL METHOD l_doc->create_simple_element
      EXPORTING
        name   = 'ponumber'
        parent = l_pohead
        value  = str
      RECEIVING
        rval   = l_element.
    str = itab_po-aedat .
    CALL METHOD l_doc->create_simple_element
      EXPORTING
        name   = 'podate'
        parent = l_pohead
        value  = str
      RECEIVING
        rval   = l_element.
    PERFORM fill_itab2xml TABLES  itab_po-item
                          USING   'pobody'
                                  'poitem'
                                  l_po.
  ENDLOOP.
  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.                    "create_xml
*---------------------------------------------------------------------*
*       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.                    "fill_itab2xml
*---------------------------------------------------------------------*
*       FORM download                                                 *
*---------------------------------------------------------------------*
FORM download.
  CALL FUNCTION 'GUI_DOWNLOAD'
       EXPORTING
            bin_filesize = xml_size
            filename     = 'C:\46C.XML'
            filetype     = 'BIN'
       TABLES
            data_tab     = xml_table.
ENDFORM.                    "download
 
 
 
稍微修改一下,就能达到下图的效果:

ABAP内表数据做层次XML输出的更多相关文章

  1. ABAP内表数据和JSON格式互转

    本程序演示ABAP内表数据如何转为JSON格式,以及JSON数据如何放入内表. 注:json字符串格式如:jsonstr = '[ {flag: "0",message: &quo ...

  2. ABAP 内表数据 与 Json串 相互转换

    内表: A B C IMINGZHA  HAIMINGZ AIMINGZH 1 2 3 4 5 6 Json串:  [{a: "IMINGZHA", b: "HAIMIN ...

  3. ABAP 内表 详解

    声明:原创作品,转载时请注明文章来自SAP师太技术博客( 博/客/园www.cnblogs.com):www.cnblogs.com/jiangzhengjun,并以超链接形式标明文章原始出处,否则将 ...

  4. Abap 内表的语法

    ABAP中的内表相当于其他程序设计语言中的二维数组,存储多行结构相同的数据 不同于二维数组,内表在创建后,列结构与列数是固定不变的,而行数是动态增长的  内表支持循环对每行数据进行操作,也支持整体操作 ...

  5. REUSE_ALV_GRID_DISPLAY显示ALV,设置可编辑时,与内表数据同步问题

    使用function module: REUSE_ALV_GRID_DISPLAY显示ALV,并设置alv某些列可编辑,可是编辑后发现对应的内表数据并没有随之改变.记得需要设置一个参数的值,怎么想也记 ...

  6. ABAP 内表与XML转换

    1需求说明 在系统交互中需要将SAP内表转换为XML文件,发送给其他系统,并且将其他系统返回的XML文件转换为SAP内表. 2创建转换编辑器 事务代码:STRANS 选择简单转换 以图形方式编辑 右键 ...

  7. ABAP 内表的行列转换-发货通知单-打印到Excel里-NEW-(以运单号为单位显示ALV然后保存输出)

    *********************************************************************** * Title           : ZSDF003  ...

  8. ABAP 内表的行列转换-发货通知单-打印到Excel里-NEW

    *********************************************************************** * Title           : ZSDF002  ...

  9. ABAP 内表的行列转换-发货通知单-打印到Excel里

    需要传入数据到Excel里的模板如上图所示 ********************** *           设计主要逻辑与原理说明                                 ...

随机推荐

  1. std::multimap 按照key遍历---

    #include <iostream> #include <unordered_map> using namespace std; int main() { unordered ...

  2. Chrome 完整版官方下载

    Chrome下载默认不是完整版本,需要长久等等.so... 在下载地址后加参数:?standalone=1  解决问题.

  3. Jenkins与Docker相关的Plugin使用

    原文地址:http://blog.csdn.net/ztsinghua/article/details/52128140 Jenkins与Docker相关的Plugin 在Jenkins Plugin ...

  4. docker pull net/http: TLS handshake timeout错误解决

    docker pull  net/http: TLS handshake timeout  出现这个错误,原因很明显,我们在围城里,有两种解决办法,一种是用梯子爬围墙,一种是用国内源,下面用国内源 e ...

  5. 红米手机连接logcat,调试信息刷屏解决办法

    我买了红米,平时拿它来当作安卓测试机的 可是把它接入eclipse里面,发现它会往logcat打印大量的日志,我自己想调试一个程序的时候,自己的程序的日志一会儿就被冲刷没了 新建一个logcat me ...

  6. CGI是什么 搜索了这么多,大致看明白了保留下来。

    转自:http://blog.chinaunix.net/uid-13408389-id-2894933.html 分类: CGI是什么 CGI是CommonGatewayInterface 的简称. ...

  7. CentOS 6.9上安装mysql-5.6.37

    CentOS 6.9上安装mysql-5.6.37 1.准备数据存放的文件系统 新建一个逻辑卷,并将其挂载至特定目录即可.这里不再给出过程. 这里假设其逻辑卷的挂载目录为/data,而后需要创建/da ...

  8. 为什么使用JSP?

    JSP程序与CGI程序有着相似的功能,但和CGI程序相比,JSP程序有如下优势: 性能更加优越,因为JSP可以直接在HTML网页中动态嵌入元素而不需要单独引用CGI文件. 服务器调用的是已经编译好的J ...

  9. VB.NET的前世今生

    [前言]初次见到这个强大的东西.一看名字就没有了陌生感,由于它和我曾经见过的VB肯定有非常多的联系. 俗话说,看人看相,了解看感觉(O(∩_∩)O~~几乎相同这个意思吧). 要想了解VB.net就要从 ...

  10. 苹果input点击页面稍微变大的问题

    今天在群里看到有人问input标签点击以后在ios下页面会变大一点的问题  说实话我是没有遇到过后来解决了我看了一下代码 我明白了 不是我没有遇到过是因为我写的比较规范 所以没出现那样的问题  嘿嘿. ...