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. 倍福TwinCAT(贝福Beckhoff)基础教程1.2 TwinCAT安装配置

    由于TC2和TC3都有可能用到,个人推荐都安装,但是注意必须是先安装的TwinCAT2,然后安装TwinCAT3,如果反了可能两个都没法用(打开TcSwitchRuntime提示Both TwinCA ...

  2. XP如何在桌面新建宽带连接的快捷方式

    1 打开控制面板,点击网络和Internet连接 2 如果存在宽带连接选项. 则点击左侧的网上邻居,然后点击查看网络连接 右击宽带连接,点击创建快捷方式,放到桌面,改一下快捷方式的名字即可.   3 ...

  3. JavaScript对象按值传递

    1.示例 <!DOCTYPE html> <html lang="zh"> <head> <meta charset="UTF- ...

  4. Selenium3.14.1+Python安装和第一个Demo

    言简意赅的说下Selenium是什么 Selenium是前台测试框架,支持IE(7, 8, 9, 10, 11),Mozilla Firefox,Safari,Google Chrome等浏览器,我只 ...

  5. Python Numpy 数组的初始化和基本操作

    一.基础: Numpy的主要数据类型是ndarray,即多维数组.它有以下几个属性: ndarray.ndim:数组的维数 ndarray.shape:数组每一维的大小 ndarray.size:数组 ...

  6. Mac下面的SecureCRT(附破解方案) 更新到最新的7.3.2(转)

    转自 http://bbs.weiphone.com/read-htm-tid-6939481.html 继续更新到7.3.2的破解.只是升级了下secureCRT到7.3.2,方法还是不变 相信很多 ...

  7. atitit.ntfs ext 文件系统新特性对比

    atitit.ntfs ext 文件系统新特性对比 1. 现代文件系统应该有的特性2 1.1. 恢复Log2 1.2. 压缩2 1.3. Meta ext2 1.4. Fulltextཟsearch  ...

  8. Unity3D 之IAP

    本人是一个Unity忠实爱好者,鉴于网上关于Unity的内置付费教程 少之甚少,本人就把自己倒腾过的IAp分享出来,仅供大家参考.一.搭建号沙盒环境( 详细请看:http://xiaominghimi ...

  9. iOS swift 给MBProgressHUD添加分类

    MBProgressHUD在开发中经常会用到,今天把MBProgressHUD的方法拓展了一下,更加方便使用 1.可以实现gif图片的展示,使用时请替换test.gif 2.可以控制是否允许交互,如果 ...

  10. bootstrap input 加了 disabled 后台竟然接受不到值

    下午做了一个input  值需要不可改变.在input属性中加入了  disabled .在后台接受  var_dump($_POST); 竟然看不到值. <input type="t ...