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. PHP奇偶行不同显示不同的背景

    有时数据成表格状 为了更加美观会将奇偶行显示不同的背景色. 实现代码: <foreach name="list" item="v" key='k'> ...

  2. springMVC 前后台日期格式传值解决方式之二(共二) @InitBinder的使用

    关于springmvc日期问题的解决方式 除了本博客的[springMVC 前后台日期格式传值解决方式之 @DateTimeFormat的使用和配置]一文, 还有如下这种方式: 在Controller ...

  3. javascript继承—prototype最优两种继承(空函数和循环拷贝)

    一.利用空函数实现继承 参考了文章javascript继承-prototype属性介绍(2) 中叶小钗的评论,对这篇文章中的方案二利用一个空函数进行修改,可以解决创建子类对象时,父类实例化的过程中特权 ...

  4. 下拉刷新Listview(8.30)

    Android-PullToRefresh 1项目托管地址: https://github.com/bavariama1/Android-PullToRefresh 2 快速开始教程:https:// ...

  5. Memcache针对不同场景数据应用缓存策略

    Memcache主要的作用是为减轻大访问量对数据库的冲击,所以一般的逻辑是首先从memcache中读取数据,如果没有就从数据库中读取数据写入到memcache中,等下一次读取的时候就可以从memcac ...

  6. ASP.NET CORE RAZOR :初始化数据库

    官方说法是:设定数据库种子https://docs.microsoft.com/zh-cn/aspnet/core/tutorials/razor-pages/sql 应用背景:初次部署系统时,设定一 ...

  7. linux安全组配置

    万网的是这样子配置的:

  8. SQL 时间格式转换

    ------- 获取当前时间 -------- DECLARE @currentTime varchar(); SET @currentTime = CONVERT(VARCHAR(),GETDATE ...

  9. 【Cocos2dX(2.x)_Lua开发之三】

    [Cocos2dX(2.x)_Lua开发之三]在Lua中使用自定义精灵(Lua脚本与自创建类之间的访问)及Lua基础讲解 本站文章均为李华明Himi原创,转载务必在明显处注明:(作者新浪微博:@李华明 ...

  10. 在jfinal的Controller中接受json数据

    JFinal中接收URL中的参数或者model中的参数是很方便的,但是对于web2.0的网站来说,经常会以json方式提交比较复杂的数据,比如一个查询,包含了各种过滤条件和排序分页,前端脚本可能提交的 ...