STRANS一:简单的XML转换

Posted sapsb

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了STRANS一:简单的XML转换相关的知识,希望对你有一定的参考价值。

心情不好,泥总把表妹微信给冰冰了,心塞。。。

1.简单的单层结构:

<?sap.transform simple?>
<tt:transform xmlns:tt="http://www.sap.com/transformation-templates">
  <tt:root name="ROOT"/>
  <tt:template>
    <result>
      <error>
        <tt:value ref="ROOT.error"/>
      </error>
      <message>
        <tt:value ref="ROOT.message"/>
      </message>
    </result>
  </tt:template>
</tt:transform>

2.简单的表结构:

<?sap.transform simple?>
<tt:transform xmlns:tt="http://www.sap.com/transformation-templates">
  <tt:root name="ROOT"/>
  <tt:template>
    <Repairs>
      <tt:loop name="I" ref="ROOT">
        <Request>
          <Id>
            <tt:value ref="$I.ZID"/>
          </Id>
          <ProductName>
            <tt:value ref="$I.ZPRODUCT"/>
          </ProductName>
          <BrandName>
            <tt:value ref="$I.ZBRAND"/>
          </BrandName>
          <StoreName>
            <tt:value ref="$I.ZSTNAME"/>
          </StoreName>
          <RepairerName>
            <tt:value ref="$I.ZREPNAME"/>
          </RepairerName>
          <Created>
            <tt:value ref="$I.ZCREATED"/>
          </Created>
          <Updated>
            <tt:value ref="$I.ZUPDATED"/>
          </Updated>
          <StatusCode>
            <tt:value ref="$I.ZSTATUS"/>
          </StatusCode>
          <StatusText>
            <tt:value ref="$I.ZSTATUST"/>
          </StatusText>
          <Overdue>
            <tt:value ref="$I.ZOVERDUE"/>
          </Overdue>
        </Request>
      </tt:loop>
    </Repairs>
  </tt:template>
</tt:transform>

3.既有结构又有表:

<?sap.transform simple?>
<tt:transform xmlns:tt="http://www.sap.com/transformation-templates">
  <tt:root name="OUTPUT"/>
  <tt:template>
    <TX>
      <REQUEST_SN>
        <tt:value ref="OUTPUT.REQUEST_SN"/>
      </REQUEST_SN>
      <CUST_ID>
        <tt:value ref="OUTPUT.CUST_ID"/>
      </CUST_ID>
      <TX_CODE>
        <tt:value ref="OUTPUT.TX_CODE"/>
      </TX_CODE>
      <RETURN_CODE>
        <tt:value ref="OUTPUT.RETURN_CODE"/>
      </RETURN_CODE>
      <RETURN_MSG>
        <tt:value ref="OUTPUT.RETURN_MSG"/>
      </RETURN_MSG>
      <LANGUAGES>
        <tt:value ref="OUTPUT.LANGUAGES"/>
      </LANGUAGES>
      <TX_INFO>
        <ACCNO1>
          <tt:value ref="OUTPUT.TX_INFO.ACCNO1"/>
        </ACCNO1>
        <CURR_COD>
          <tt:value ref="OUTPUT.TX_INFO.CURR_COD"/>
        </CURR_COD>
        <ACC_NAME>
          <tt:value ref="OUTPUT.TX_INFO.ACC_NAME"/>
        </ACC_NAME>
        <ACC_ORGAN>
          <tt:value ref="OUTPUT.TX_INFO.ACC_ORGAN"/>
        </ACC_ORGAN>
        <ACC_STATE>
          <tt:value ref="OUTPUT.TX_INFO.ACC_STATE"/>
        </ACC_STATE>
        <INTR>
          <tt:value ref="OUTPUT.TX_INFO.INTR"/>
        </INTR>
        <TOTAL_PAGE>
          <tt:value ref="OUTPUT.TX_INFO.TOTAL_PAGE"/>
        </TOTAL_PAGE>
        <PAGE>
          <tt:value ref="OUTPUT.TX_INFO.PAGE"/>
        </PAGE>
        <POSTSTR>
          <tt:value ref="OUTPUT.TX_INFO.POSTSTR"/>
        </POSTSTR>
        <FLAG>
          <tt:value ref="OUTPUT.TX_INFO.FLAG"/>
        </FLAG>
        <FILE_LOCSTR>
          <tt:value ref="OUTPUT.TX_INFO.FILE_LOCSTR"/>
        </FILE_LOCSTR>
        <DETAILLIST>
          <tt:loop name="I" ref="OUTPUT.TX_INFO.DETAILLIST.DETAILINFO">
            <DETAILINFO>
              <TRANDATE>
                <tt:value ref="$I.TRANDATE"/>
              </TRANDATE>
              <TRANTIME>
                <tt:value ref="$I.TRANTIME"/>
              </TRANTIME>
              <CRE_TYP>
                <tt:value ref="$I.CRE_TYP"/>
              </CRE_TYP>
              <CRE_NO>
                <tt:value ref="$I.CRE_NO"/>
              </CRE_NO>
              <MESSAGE>
                <tt:value ref="$I.MESSAGE"/>
              </MESSAGE>
              <AMT>
                <tt:value ref="$I.AMT"/>
              </AMT>
              <AMT1>
                <tt:value ref="$I.AMT1"/>
              </AMT1>
              <FLAG1>
                <tt:value ref="$I.FLAG1 "/>
              </FLAG1>
              <ACCNO2>
                <tt:value ref="$I.ACCNO2"/>
              </ACCNO2>
              <ACC_NAME1>
                <tt:value ref="$I.ACC_NAME1"/>
              </ACC_NAME1>
              <FLAG2>
                <tt:value ref="$I.FLAG2"/>
              </FLAG2>
              <TRAN_FLOW>
                <tt:value ref="$I.TRAN_FLOW"/>
              </TRAN_FLOW>
              <BFLOW>
                <tt:value ref="$I.BFLOW"/>
              </BFLOW>
              <DET_NO>
                <tt:value ref="$I.DET_NO"/>
              </DET_NO>
              <DET>
                <tt:value ref="$I.DET"/>
              </DET>
              <REAL_TRANDATE>
                <tt:value ref="$I.REAL_TRANDATE"/>
              </REAL_TRANDATE>
              <RLTV_ACCNO>
                <tt:value ref="$I.RLTV_ACCNO"/>
              </RLTV_ACCNO>
              <CADBank_Nm>
                <tt:value ref="$I.CADBank_Nm"/>
              </CADBank_Nm>
              <Ovrlsttn_Trck_No>
                <tt:value ref="$I.Ovrlsttn_Trck_No"/>
              </Ovrlsttn_Trck_No>
              <ExoStm_Py_Rmrk>
                <tt:value ref="$I.ExoStm_Py_Rmrk"/>
              </ExoStm_Py_Rmrk>
            </DETAILINFO>
          </tt:loop>
        </DETAILLIST>
      </TX_INFO>
    </TX>
  </tt:template>
</tt:transform>

下面就简单说说Strans的简单转换:

1.ROOT,这是转换的根节点,开始节点,程序到这就执行转换开始了,后面跟的NAME是对应外面的返回结构名字:比如第三个,外面调用就需要:

  CALL TRANSFORMATION z_ccb_detail_return
      SOURCE XML iv_response_message_xstring
      RESULT output = ls_resp_mapping_result_data.

把结果返给节点output对应的参数结构。

2.template这个是没有实际节点的,在简单转换里都是自动生成的,表示模板结构。

3.后面开始带标签的字段了,注意结构层次,要对应到XML的结构层次,比如第一个:就是RESULT结构名,然后带两个字段。

结构第一级节点,用ROOT的名字.字段名。这表示这是第一级节点,会直接默认到第一级结构对应的字段。

如果第二级还是结构,那么第一级的名字作为标签,第二级以第一级的标签为前缀,加上.加上字段名。

如果有循环的表结构,这时候需要以表名作为标签字段。然后加上loop循环,因为一般到循环已经是深结构了,所以会做个映射。如3.

以上是关于STRANS一:简单的XML转换的主要内容,如果未能解决你的问题,请参考以下文章

20170319 ABAP 生成XML文件

Strans 内表-xml文件

需要示例代码片段帮助

将 XSLT 转换的 XML 片段写入 XMLStreamWriter

将字符串 XML 片段转换为 Java 中的文档节点

在 Groovy 中将字符串 XML 片段转换为文档节点