REPORT  YTST_XML_14.

*----------------------------------------------------------------------*
* PANTALLA SELECCION *
PARAMETERS: GK_RUTA TYPE RLGRAP-FILENAME DEFAULT 'C:\ECC6.XML'.
* PANTALLA SELECCION *
*----------------------------------------------------------------------*
*----------------------------------------------------------------------*
* 针对XML文件的特殊结构需要构造一个特殊的数据结构
* 定义一个下层节点
TYPES: BEGIN OF TURNOS,
    LU LIKE T552A-TPR01,
    MA LIKE T552A-TPR01,
    MI LIKE T552A-TPR01,
    JU LIKE T552A-TPR01,
    VI LIKE T552A-TPR01,
    SA LIKE T552A-TPR01,
    DO LIKE T552A-TPR01,
END OF TURNOS.
* TYPE TURNOS *
*----------------------------------------------------------------------*
*----------------------------------------------------------------------*
* 根据XML file stru 嵌套一下
TYPES:BEGIN OF SOCIO,
        NUMERO LIKE PERNR-PERNR,
        REPOSICION LIKE PA0050-ZAUVE,
        NOMBRE LIKE PA0002-VORNA,
        TURNOS TYPE TURNOS,
      END OF SOCIO.
* TYPE SOCIO *
*----------------------------------------------------------------------*
*----------------------------------------------------------------------*
* 放到哪里呢,当然是internal table
DATA:BEGIN OF ACCESOS OCCURS 0,
      SOCIO TYPE SOCIO,
     END OF ACCESOS.

*----------------------------------------------------------------------*
*----------------------------------------------------------------------*
START-OF-SELECTION.
  PERFORM LLENA_ACCESOS.
  PERFORM DESCARGA_XML.

END-OF-SELECTION.
*----------------------------------------------------------------------*
*----------------------------------------------------------------------*
FORM LLENA_ACCESOS.
  REFRESH ACCESOS.
  CLEAR ACCESOS.
* 开始填充了,这里只搞两个基本Item
  MOVE:'45050' TO ACCESOS-SOCIO-NUMERO,
       'MOISES MORENO' TO ACCESOS-SOCIO-NOMBRE,
       '0'  TO ACCESOS-SOCIO-REPOSICION,
       'T1' TO ACCESOS-SOCIO-TURNOS-LU,
       'T2' TO ACCESOS-SOCIO-TURNOS-MA,
       'T3' TO ACCESOS-SOCIO-TURNOS-MI,
       'T4' TO ACCESOS-SOCIO-TURNOS-JU,
       'T5' TO ACCESOS-SOCIO-TURNOS-VI,
       'T6' TO ACCESOS-SOCIO-TURNOS-SA,
       'T7' TO ACCESOS-SOCIO-TURNOS-DO.
  APPEND ACCESOS.
  CLEAR ACCESOS.
  MOVE:'45051' TO ACCESOS-SOCIO-NUMERO,
       'RUTH PE?A' TO ACCESOS-SOCIO-NOMBRE,
       '0'  TO ACCESOS-SOCIO-REPOSICION,
       'T1' TO ACCESOS-SOCIO-TURNOS-LU,
       'T2' TO ACCESOS-SOCIO-TURNOS-MA,
       'T3' TO ACCESOS-SOCIO-TURNOS-MI,
       'T4' TO ACCESOS-SOCIO-TURNOS-JU,
       'T5' TO ACCESOS-SOCIO-TURNOS-VI,
       'T6' TO ACCESOS-SOCIO-TURNOS-SA,
       'T7' TO ACCESOS-SOCIO-TURNOS-DO.
  APPEND ACCESOS.
ENDFORM.                    "LLENA_ACCESOS

*----------------------------------------------------------------------*
*----------------------------------------------------------------------*
* FORM DESCARGA_XML *
FORM DESCARGA_XML.
  DATA: L_DOM TYPE REF TO IF_IXML_ELEMENT, " XML 元素对象,也可以叫一个Item
        M_DOCUMENT TYPE REF TO IF_IXML_DOCUMENT, " XML 文件对象
        G_IXML   TYPE REF TO IF_IXML,  " XML 接口对象
        W_STRING TYPE XSTRING,
        W_SIZE   TYPE I,
        W_RESULT TYPE I,
        W_LINE   TYPE STRING,
        IT_XML   TYPE DCXMLLINES,
        S_XML    LIKE LINE OF IT_XML,
        W_RC     LIKE SY-SUBRC.
  DATA: XML TYPE DCXMLLINES.
  DATA: RC  TYPE SY-SUBRC,
  BEGIN OF XML_TAB OCCURS 0,
         D LIKE LINE OF XML,
       END OF XML_TAB.

* 先装载一个XML对象,象JAVA的IMPORT一样
  CLASS CL_IXML DEFINITION LOAD.

* 创建一个XML文件对象
  G_IXML = CL_IXML=>CREATE( ).
  CHECK NOT G_IXML IS INITIAL.

* 创建一个XML文件
  M_DOCUMENT = G_IXML->CREATE_DOCUMENT( ).
  CHECK NOT M_DOCUMENT IS INITIAL.
  WRITE: / 'Converting DATA TO DOM 1:'.

* 这下好了,该创建XML元素了,创建时参考了元素的数据结构'ACCESOS'
  CALL FUNCTION 'SDIXML_DATA_TO_DOM'
    EXPORTING
      NAME         = 'ACCESOS'
      DATAOBJECT   = ACCESOS[]
    IMPORTING
      DATA_AS_DOM  = L_DOM
    CHANGING
      DOCUMENT     = M_DOCUMENT
    EXCEPTIONS
      ILLEGAL_NAME = 1
      OTHERS       = 2.
  IF SY-SUBRC = 0.
    WRITE 'Ok'.
  ELSE.
    WRITE: 'Err =',
    SY-SUBRC.
  ENDIF.
  CHECK NOT L_DOM IS INITIAL.

* 节点创建成功后添加节点到文件
  W_RC = M_DOCUMENT->APPEND_CHILD( NEW_CHILD = L_DOM ).
  IF W_RC IS INITIAL.
    WRITE 'Ok'.
  ELSE.
    WRITE: 'Err =',
    W_RC.
  ENDIF.

* 好了,该转换XML File了,添加该死的</>,不要怪我老带着一点恨劲,被逼的!
  CALL FUNCTION 'SDIXML_DOM_TO_XML'
    EXPORTING
      DOCUMENT      = M_DOCUMENT
    IMPORTING
      XML_AS_STRING = W_STRING
      SIZE          = W_SIZE
    TABLES
      XML_AS_TABLE  = IT_XML
    EXCEPTIONS
      NO_DOCUMENT   = 1
      OTHERS        = 2.
  IF SY-SUBRC = 0.
    WRITE 'Ok'.
  ELSE.
    WRITE: 'Err =',
    SY-SUBRC.
  ENDIF.

* 下来就是准备输出了,还是内表
  LOOP AT IT_XML INTO XML_TAB-D.
    APPEND XML_TAB.
  ENDLOOP.

CALL FUNCTION 'GUI_DOWNLOAD'
    EXPORTING
      BIN_FILESIZE = W_SIZE
      FILENAME     = GK_RUTA
      FILETYPE     = 'BIN'
    TABLES
      DATA_TAB     = XML_TAB.

IF SY-SUBRC <> 0.
    MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
    WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
  ENDIF.
ENDFORM.                    "DESCARGA_XML

函数创建XML文件的更多相关文章

  1. VC 使用msxml6.dll动态链接库中的函数读写XML文件

    VC 使用msxml6.dll动态链接库中的函数读写XML文件 目录 1 引言 2 .dll使用方法 3 常用函数总结 4 实例应用 5 运行效果预览 6 补充说明 7 不足之处 8 更新   引言: ...

  2. .net中创建xml文件的两种方法

    .net中创建xml文件的两种方法 方法1:根据xml结构一步一步构建xml文档,保存文件(动态方式) 方法2:直接加载xml结构,保存文件(固定方式) 方法1:动态创建xml文档 根据传递的值,构建 ...

  3. C#操作XML学习之创建XML文件的同时新建根节点和子节点(多级子节点)

    最近工作中遇到一个问题,要求创建一个XML文件,在创建的时候要初始化该XML文档,同时该文档打开后是XML形式,但是后缀名不是.在网上找了好些资料没找到,只能自己试着弄了一下,没想到成功了,把它记下来 ...

  4. Java 创建xml文件和操作xml数据

    java中的代码 import java.io.File; import java.io.StringWriter; import javax.xml.parsers.DocumentBuilder; ...

  5. TinyXML2读取和创建XML文件 分类: C/C++ 2015-03-14 13:29 94人阅读 评论(0) 收藏

    TinyXML2是simple.small.efficient C++ XML文件解析库!方便易于使用,是对TinyXML的升级改写!源码见本人上传到CSDN的TinyXML2.rar资源:http: ...

  6. XML文件操作类--创建XML文件

    这个类是在微软XML操作类库上进行的封装,只是为了更加简单使用,包括XML类创建节点的示例. using System; using System.Collections; using System. ...

  7. asp.net创建XML文件方法

    方法一:按照XML的结构一步一步的构建XML文档.    通过.Net FrameWork SDK中的命名空间"System.Xml"中封装的各种类来实现的 方法一:按照XML的结 ...

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

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

  9. Dom4j解析Xml文件,Dom4j创建Xml文件

    Dom4j解析Xml文件,Dom4j创建Xml文件 >>>>>>>>>>>>>>>>>>&g ...

随机推荐

  1. centos 6.x Python2.7x安装

    centos 6.x Python2.7x安装 yum install -y gcc gcc-develwget https://www.python.org/ftp/python/2.7.14/Py ...

  2. laravel性能优化技巧(转)

    说明 性能一直是 Laravel 框架为人诟病的一个点,所以调优 Laravel 程序算是一个必学的技能. 接下来分享一些开发的最佳实践,还有调优技巧,大家有别的建议也欢迎留言讨论. 这里是简单的列表 ...

  3. Oracle 左外连接的一些測试

    为了更加深入左外连接,我们做一些測试,外连接的写法有几种形式,我们能够通过10053跟踪到终于SQL转换的形式. --初始化数据 create table A (   id number,   age ...

  4. python pip install error

    使用pip install的时候报错 解决方法是使用如下的命令进行安装 python -m pip install sqlalchemy 升级pip的命令python2 -m pip install ...

  5. 偶遇 smon 进程cpu 开销高异常分析

    今天突然发现线上一台oracle 数据库 servercpu 跑的非常高.感觉不是非常正常,细致看了下.发现是smon 进程吃掉了一个cpu. 那么这个smon 进程究竟在倒腾啥玩意 对smon 进程 ...

  6. JavaWeb Session详解

    代码地址如下:http://www.demodashi.com/demo/12756.html 记得把这几点描述好咯:代码实现过程 + 项目文件结构截图 + ## Session的由来 上一篇博文介绍 ...

  7. 【转】mongoDB命令行和客户端访问

    一.客户端 mongodb客户端常用的是mongoVUE  下载mongoVUE:网上下载地址,并且是破解版.[若没分,可以单独找我].因为非破解版的只有15天的使用限制.         打开界面如 ...

  8. libpointmatcher的filter

    Maximum Density Filter Points are only considered for rejection if they exceed a density threshold, ...

  9. 征信报告页面的input验证收集

    https://ipcrs.pbccrc.org.cn/ function checkLoginName() { var loginName = $.trim($("#loginname&q ...

  10. ELK之jason配置nginx文件等多个配置文件

    [root@web02 ~]# cat /etc/logstash/conf.d/nginx.conf input { file { path => "/var/log/nginx/a ...