DATA: BEGIN OF itab_matnr OCCURS  ,
matnr LIKE mara-matnr ,
maktx LIKE makt-maktx ,
END OF itab_matnr .
DATA: BEGIN OF itab_class OCCURS ,
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() 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 ROWS
WHERE spras = '' .
SELECT class kschl FROM m_wwgha
INTO TABLE itab_class
UP TO ROWS
WHERE spras IN ('','E') .
DELETE itab_class WHERE class = ''.
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 =
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 ,
length TYPE i ,
decimals TYPE i,
type_kind TYPE c,
name() 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 = AND sy-fdpos <> .
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.

一个简单的创建xml方式的更多相关文章

  1. 一个简单的创建圆角图像的UIImage扩展实现

    - (UIImage *)roundedCornerImageWithCornerRadius:(CGFloat)cornerRadius { CGFloat w = self.size.width; ...

  2. 一个简单的创建dom的函数

    var  regName = /^(div|a|p|ul|li|input|select|document|body|iframe)$/;function createDom(name, obj) { ...

  3. uiautomator 一个简单脚本创建流程

    http://www.codeceo.com/article/android-ui-auto-test.html

  4. C#创建XML文件并保存

    随着XML的普及以及在动态WEB应用程序中大量应用,如何通过.NET创建,删除,修改XML文件变的也来也重要了.一个简单的概念是,XML文件跟大的文本文件并没有什么区别,同时它是先于.NET出现,很多 ...

  5. jsp实时显示后台批处理进度 - out分块,简单的长连接方式

    这两天在实现一个批处理操作,但是想让前台实时显示后台批处理进度,本想着用复杂一些的框架可以实现异步信息调用 但是鉴于是内部管理系统,且只有一两个人用到这个功能,所以做了一个简单的长连接方式的实时响应 ...

  6. js new一个对象的过程,实现一个简单的new方法

    对于大部分前端开发者而言,new一个构造函数或类得到对应实例,是非常普遍的操作了.下面的例子中分别通过构造函数与class类实现了一个简单的创建实例的过程. // ES5构造函数 let Parent ...

  7. htpwdScan — 一个简单的HTTP暴力破解、撞库攻击脚本

    李姐姐之前跟我们分享了子域名枚举工具subDomainBrute<subDomainsBrute — 改进渗透测试时暴力枚举子域名的python脚本>,这回带给我们htpwdScan ht ...

  8. ? 原创: 铲子哥 搜狗测试 今天 shell编程的时候,往往不会把所有功能都写在一个脚本中,这样不太好维护,需要多个脚本文件协同工作。那么问题来了,在一个脚本中怎么调用其他的脚本呢?有三种方式,分别是fork、source和exec。 1. fork 即通过sh 脚本名进行执行脚本的方式。下面通过一个简单的例子来讲解下它的特性。 创建father.sh,内容如下: #!/bin/bas

    ? 原创: 铲子哥 搜狗测试 今天 shell编程的时候,往往不会把所有功能都写在一个脚本中,这样不太好维护,需要多个脚本文件协同工作.那么问题来了,在一个脚本中怎么调用其他的脚本呢?有三种方式,分别 ...

  9. [转载]我的WCF之旅(1):创建一个简单的WCF程序

    为了使读者对基于WCF的编程模型有一个直观的映像,我将带领读者一步一步地创建一个完整的WCF应用.本应用功能虽然简单,但它涵盖了一个完整WCF应用的基本结构.对那些对WCF不是很了解的读者来说,这个例 ...

随机推荐

  1. 深度学习之Seq_seq网络

    知识点 """ 机器翻译: 历史: 1.逐字翻译 2.基于统计学的机器翻译 3.循环网络和编码 翻译过程: 输入 -- > encoder -->向量 --& ...

  2. smarty 第一条数据判断

    <div class="shangpin_rightdiv2"> <p>颜色</p> <ul id="toggle"& ...

  3. 记一次django学习1.0和2.0区别

    依据学习课程的教学,在项目实战学习过程中教学使用django1.0,获取ManytoMany关联字段,源码使用的是 即django使用 models.Customer.tags.rel.to.obje ...

  4. MySQL知识篇-SQL2

    1 数据库基本操作? (1) 查看数据库 show databases; (2)切换到指定的数据库 use dbname; (3)创建数据库 create database 库名 charset=ut ...

  5. MySQL_数据表命令

    目录 数据表操作 1.创建数据表: 2. 修改表结构: 数据表查看 1.查看数据库中所有表的信息 2.查看表结构 3.查看创建表时所输入的命令 4.删除数据表 数据表操作 关于Mysql的数据类型,点 ...

  6. sql普通语句

    select DISTINCT t_id from nrc_newsDISTINCT不会输出相同的值select top 5 * from nrc_news;检索前五行select * from nr ...

  7. 学习笔记:html学习之一:html基本标记

    1. 概论 一个完整的 HTML 文档必须包含 3 个部分: 一个由 元素定义的文档版本信息. 一个由 定义各项声明的文档头部, 作为各种声明信息的包含元素出现在文档的顶端,并且要先于 出现. 一个由 ...

  8. (转)新手入局 你必须要知道的四类Equity

    许多人缠着我教他们打牌,开始几乎所有的问题都是问,你都玩什么牌. 这个话外行又很难解释,想来想去,我这样总结给他们(我也忘记自己过去有没有说过,我觉得总结的挺好的,只怕初学者听着又和天书一样了). 是 ...

  9. Linux多线程编程 - sleep 和 pthread_cond_timedwait

    #include <stdio.h> #include <stdlib.h> int flag = 1; void * thr_fn(void * arg) {   while ...

  10. 微信小程序开放数据解密 AES-128-CBC 解密(C#版本)

    最近在开发小程序,需要跟微信服务端交互,微信敏感数据都有加密返回,需要在服务端接收进行解密后再返回给客户端小程序,今天就通过C# 进行数据的解密,官方下载下来是Node.C++.php等,就是没有C# ...