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. foreach 加& 什么意思?

    foreach 加&遍历的同时改变原数组即修改数据或者增加数据 foreach 加& 什么意思? 注意:如果我要改变数组某一个值 直接遍历的话原数组是不会变的 下面提供两种方法 1.我 ...

  2. 【Excle数据透视表】如何在数据透视表中使用合并单元格标志

    先有数据透视表如下: 现在看着这个格式不舒服,我们希望调整成如下这种样式 步骤 单击数据透视表任意单元格→右键→数据透视表选项→布局和格式→合并且居中排列带标签的单元格 注意:如果数据透视表报表布局不 ...

  3. 从两张Excel表所想到的

    从两张Excel表所想到的 前几日,客服妹子发过来几张表,让我给她做下匹配,然后做了,想了,便有了这篇博文,不由感慨,看似简简单单的两张Excel表其实藏着好多东西,记叙如下,与君共勉. 最初的需求: ...

  4. Oracle SOA套件12c

    产品概览 随着基于云的应用越来越多的被企业所採用,以及移动技术与企业应用的集成的需求的增多,企业级应用集成的复杂度也前所未有的提升. Oracle SOA套件12c,业内最完整的统一应用集成解决方式的 ...

  5. mysql的UNIX_TIMESTAMP用法

    UNIX_TIMESTAMP 一般是用于unix的时间戳. 例子: SELECT UNIX_TIMESTAMP("2016-07-11")-- 1468166400SELECT U ...

  6. laravel处理ajax的post提交

    Html页面(laravel表单提交必须token)所以 头部要加入: <meta name="csrf-token" content="{{ csrf_token ...

  7. java之CGLIB动态代理

    © 版权声明:本文为博主原创文章,转载请注明出处 CGLIB动态代理: CGLIB动态代理就是对指定的类生成一个子类,覆盖其中所有的方法并环绕增强 优势: - 1. 业务类只需要关注业务逻辑本身,保证 ...

  8. Django--基础补充

    render 函数 在Django的使用中,render函数大多与浏览器发来的GET请求一并出现,它的使用方法非常简单 例如:render(request,"xxx.html",{ ...

  9. Dockerfile安装KOD可道云

    [root@docker01 base2]# cat Dockerfile FROM centos:6.8 RUN yum install openssh-server -y RUN /etc/ini ...

  10. Objective-C 的动态提示和技巧

    过去的几年中涌现了大量的Objective-C开发者.有些是从动态语言转过来的,比如Ruby或Python,有些是从强类型语言转过来的,如Java或C#,当然也有直接以Objective-C作为入门语 ...