导语:最近做一个银企直连的接口改造,原来数据传输格式为XML格式,现在要转成josn格式,我的方案是xml转成abap,abap转成josn,这里就不分享abap转josn的过程了,感兴趣可以在【abap josn转换】中看一下。
本次转换是进行复杂的xml转换(XSLT程序),还有一种是【abap xml转换(2)简单转换】,两者的xml格式和创建过程略有差异,下面分享一下实现过程。
1、查看原来的XML格式
2、创建一个同样格式的XML
3、根据XML格式创建结构
4、读取XML数据到结构
原来的XML格式
原来的xml是在代理类中,存放在一个string类型的字符串中。
换一种格式查看一下xml的内容
创建一个同样格式的XML
根据上图的xml创建一个同样格式的xml,以便将数据放到结构中。
事务码:STRANS,选择转换类型为 X XSLT
创建XML如下图,尽量节点名称要和上面debug界面中的XML名称一样,要特别注意红色框住的区域,必须用原XML格式的【节点名称/字段名称】,行项目需要【节点名称/行项目节点名称/字段名称】这样才可以把值一一对应的放进我们的结构中。
XML创建代码:
<xsl:transform xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:sap="http://www.sap.com/sapxsl" version="1.0">
<xsl:strip-space elements="*"/>
<xsl:template match="/">
<asx:abap xmlns:asx="http://www.sap.com/abapxml" version="1.0">
<asx:values>
<TX>
<REQUEST_SN>
<xsl:value-of select="TX/REQUEST_SN"/>
</REQUEST_SN>
<CUST_ID>
<xsl:value-of select="TX/CUST_ID"/>
</CUST_ID>
<USER_ID>
<xsl:value-of select="TX/USER_ID"/>
</USER_ID>
<PASSWORD>
<xsl:value-of select="TX/PASSWORD"/>
</PASSWORD>
<TX_CODE>
<xsl:value-of select="TX/TX_CODE"/>
</TX_CODE>
<LANGUAGE>
<xsl:value-of select="TX/LANGUAGE"/>
</LANGUAGE>
<TX_INFO>
<PAY_ACCNO>
<xsl:value-of select="TX/TX_INFO/PAY_ACCNO"/>
</PAY_ACCNO>
<RECV_ACCNO>
<xsl:value-of select="TX/TX_INFO/RECV_ACCNO"/>
</RECV_ACCNO>
<RECV_ACC_NAME>
<xsl:value-of select="TX/TX_INFO/RECV_ACC_NAME"/>
</RECV_ACC_NAME>
<RECV_EXCHANGENO>
<xsl:value-of select="TX/TX_INFO/RECV_EXCHANGENO"/>
</RECV_EXCHANGENO>
<RECV_COUNTERNO>
<xsl:value-of select="TX/TX_INFO/RECV_COUNTERNO"/>
</RECV_COUNTERNO>
<RECV_OPENACC_DEPT>
<xsl:value-of select="TX/TX_INFO/RECV_OPENACC_DEPT"/>
</RECV_OPENACC_DEPT>
<RECV_UBANKNO>
<xsl:value-of select="TX/TX_INFO/RECV_UBANKNO"/>
</RECV_UBANKNO>
<AMOUNT>
<xsl:value-of select="TX/TX_INFO/AMOUNT"/>
</AMOUNT>
<CUR_TYPE>
<xsl:value-of select="TX/TX_INFO/CUR_TYPE"/>
</CUR_TYPE>
<USEOF>
<xsl:value-of select="TX/TX_INFO/USEOF"/>
</USEOF>
<REM1>
<xsl:value-of select="TX/TX_INFO/REM1"/>
</REM1>
<REM2>
<xsl:value-of select="TX/TX_INFO/REM2"/>
</REM2>
</TX_INFO>
</TX>
</asx:values>
</asx:abap>
</xsl:template>
</xsl:transform>
根据XML格式创建结构
一定要用结构来,行项目节点也要用结构,不然会catch到错误
读取XML数据到结构
DATA :lw_tx TYPE zepic_mod_2.
"解析xml内容到结构lw_tx中
CALL TRANSFORMATION zepic_get_ccb_mod2
SOURCE XML ls_other_parameters-payment_file
RESULT tx = lw_tx.
这样数据就转换到结构当中了,然后在进行abap转josn传出去就好了。
作者:小飞猪猪猪猪猪猪猪–CSDN