ABAP XML转化之ST语法总结

 

Simple Transformations

简介

ST语言是一种描述ABAP 和XML之间格式转换的编程语言,用于ABAP数据的序列化(ABAP->XML)和反序列化(XML->ABAP)。

ST程序可以通过转换编辑器进行编辑(TCODE: STRANS),优点:ST程序很容易阅读;串行访问XML数据,因此即使数据量很大,也非常高效;ST程序同时描述序列化和反序列化,即用XML序列化的ABAP数据也可以用ST程序反序列化;仅限于基本和结构化ABAP数据以及内部表的转换。

创建一个Simple Transformation

TCODE: STRANS

 

 

 

创建一个transformation之后,有一些初始语句,再此界面根据要解析的XML编写程序,

第一行<?>用于标识转换(自动插入)

第二行transform代表根元素,xmlns后面代表命名空间,tt作为此空间中的约定。

语法

<tt:transform [template="tmpl"]>

  ...

</tt:transform>

根元素的关键字,可以指定模板属性的名称(可选),指定名称的模板作为主模板,如果未指定,没有名字的模板作为主模板。

<tt:template [name="tmpl"]>

  ...

</tt:template>

定义了一个模板,ST程序至少包含一个模板,模板必须名称是不一样的(没有名称的模板只能有一个),模板名称不区分大小写。

主模板的内容表示ABAP数据序列化或数据反序列化所依据的XML数据的结构。

模板的内容可以由文本XML元素和ST命令组成。

<tt:root name="..." [[line-]type="..."

                    [length="..."]

                    [decimals="..."]]

                    [...] />

ST程序必须至少包含一个模板外部的数据根声明。

数据根是ST程序与ABAP数据对象的接口,在语句调用转换中指定为源或目标字段。

数据根使用语句tt:root定义。必须使用name属性将名称分配给数据根。

在tt:transform级别声明的数据根构成主模板的上下文,可以直接在其中寻址。

子模板中无法识别数据根。但是,当调用这些模板时,它们可以绑定到子模板的本地数据根。

 

 

每个数据根都有自己的树结构,可用于处理绑定数据对象的组件。寻址数据根的子节点相当于引用绑定到数据根的数据对象的组件。各个数据根的树结构彼此独立。

 

单个树结构中数据节点的寻址总是从数据根开始。

 

每个模板都使用自己的树结构。只有主模板使用在转换级别声明的数据根,这些根在转换期间直接绑定到ABAP数据对象。调用子模板时,本地数据根将绑定到调用方的当前数据节点。

 

[tt:]ref

使用命令设置当前节点

<tt:ref name="node">

  ...

</tt:ref>

使用属性设置当前节点

<tt:... ref="node">

  ...

</tt:...>

在文本XML元素中设置当前节点

<... tt:ref="node">

  ...

</...>

 

<tt:value [ref="node"] [map="..."]

                       [length|minLength|maxLength="len"]

                       [xsd-type...] />

Value语法用于获取结构中的具体值,通常与ref共用。

 

<tt:transform

  xmlns:tt="http://www.sap.com/transformation-templates">

  <tt:root name="ROOT"/>

  <tt:template>

    <X tt:ref="ROOT">

      <X1>

        <tt:value ref="COL1" />

      </X1>

      <X2>

        <tt:value ref="COL2" />

      </X2>

      <X3 tt:ref="STRUC2">

        <X1>

          <tt:value ref="COL1" />

        </X1>

        <X2>

          <tt:value ref="COL2" />

        </X2>

      </X3>

    </X>

  </tt:template>

</tt:transform>

 

 

<tt:loop [ref="node"] [name="alias"]>

  ...

</tt:loop>

内部表在循环中进行序列化和反序列化,该循环将当前节点设置为当前表行。

name属性可用于定义循环中当前节点的别名。在tt:loop循环中,可以使用$alias对当前节点进行寻址。

 

 

例1:

程序

DATABEGIN OF struc1,
            x1 TYPE string,
            x2 TYPE string,
            BEGIN OF struc2,
              col1 TYPE string,
              col2 TYPE string,
            END OF struc2,
          END OF struc1.
DATAlv_xml TYPE string.
DATAlt_xml TYPE STANDARD TABLE OF string.

DATAl_cx_st_error TYPE REF TO cx_st_error,
      e_message TYPE char255.

PARAMETERS p_file TYPE string DEFAULT 'C:\Users\10156700c\Desktop\test2.xml'.

cl_gui_frontend_services=>gui_upload(
  EXPORTING
    filename p_file
    filetype 
'ASC'
  CHANGING
    data_tab lt_xml
  
EXCEPTIONS
    OTHERS   19 ).

CONCATENATE LINES OF lt_xml INTO lv_xml SEPARATED BY space.

TRY.

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值