调用转换xml到abap
问题描述:
我想将一个简单的xml转换为abap。调用转换xml到abap
iam使用事务xslt_tool。
I M越来越转储
Errores蒂恩波EJEC。 ST_MATCH_FAILExcepción
CX_ST_MATCH_ELEMENT出生日期Ÿ霍拉2017年7月31日十八时55分46秒
难道你们告诉我啥子我做错了?
这是XML:
<?xml version="1.0" encoding="UTF-8"?>
<objects type="array">
<object>
<transaction-id type="integer">28</transaction-id>
<message type="symbol">FAILURE</message>
<errors type="array">
<error>
<row type="integer">0</row>
<field>Sin datos</field>
<message>El Json no puede estar en blanco.</message>
</error>
</errors>
</object>
</objects>
这是由程序生成的XSLT:
<?sap.transform simple?> <tt:transform xmlns:tt="http://www.sap.com/transformation-templates" xmlns:ddic="http://www.sap.com/abapxml/types/dictionary" xmlns:def="http://www.sap.com/abapxml/types/defined"> <tt:root name="ZDGR2_RETORNOINVOCACION" type="ddic:ZDGR2_RETORNOINVOCACION"/> <tt:template>
<ZDGR2_RETORNOINVOCACION>
<MESSAGE tt:value-ref=".ZDGR2_RETORNOINVOCACION.MESSAGE"/>
<TRANSACTION_ID tt:value-ref=".ZDGR2_RETORNOINVOCACION.TRANSACTION_ID"/>
<ERRORS>
<tt:loop ref=".ZDGR2_RETORNOINVOCACION.ERRORS">
<ZDGR2_ERRORS>
<FILA tt:value-ref="FILA"/>
<FIELD tt:value-ref="FIELD"/>
<MESSAGE tt:value-ref="MESSAGE"/>
</ZDGR2_ERRORS>
</tt:loop>
</ERRORS>
</ZDGR2_RETORNOINVOCACION> </tt:template> </tt:transform>
此的简单的程序。
Data: lv_xml Type string. data: it_resultado type ZDGR2_RETORNOINVOCACION. Concatenate '<?xml version="1.0" encoding="UTF-8"?><objects type="array"><object><transaction-id type="integer">28</transaction-id><message type="symbol">FAILURE</message><errors type="array"><error><row type="integer">0</row><field>Sin datos</field>' '<message>El Json no puede estar en blanco.</message></error></errors></object></objects>' Into lv_xml. CALL TRANSFORMATION ZDGR2_RETORNOINVOCACION
SOURCE XML lv_xml
RESULT ZDGR2_RETORNOINVOCACION = it_resultado.
答
当XML中的标记与转换中的名称或顺序不同时,会发生此转储。
在你的榜样,我看到multible问题:
你的XML结构开始像这样:
<object>
<transaction-id type="integer">28</transaction-id>
<message type="symbol">FAILURE</message>
但你的转型开始是这样的:
<ZDGR2_RETORNOINVOCACION>
<MESSAGE tt:value-ref=".ZDGR2_RETORNOINVOCACION.MESSAGE"/>
<TRANSACTION_ID tt:value-ref=".ZDGR2_RETORNOINVOCACION.TRANSACTION_ID"/>
在我看来
所以<ZDGR2_RETORNOINVOCACION>
应被命名为<object>
和<MESSAGE>
和<TRANSACTION_ID>
必须交换。
另外,在错误子你有一些missmatches
<error>
<row type="integer">0</row>
<field>Sin datos</field>
<message>El Json no puede estar en blanco.</message>
</error>
<ZDGR2_ERRORS>
<FILA tt:value-ref="FILA"/>
<FIELD tt:value-ref="FIELD"/>
<MESSAGE tt:value-ref="MESSAGE"/>
</ZDGR2_ERRORS>
<ZDGR2_ERRORS>
应该被命名为<error>
和<FILA>
应该命名为<row>
。
所以重要的规则是,标签必须在XML文件相同的名称和顺序(其不区分大小写所以它并不重要,如果它<OBJECT>
或<object>
)。
我的建议是,你可以调试转换。通过一步一步的步骤,并通过标签转储大部分时间名称或订单不正常。所以你可以快速找到错误,你不必比较整个xml结构。
请问您可以添加ST源?显然,你不考虑*对象和对象节点... – vwegert
嗨。你的意思是什么? ( 结构体) ? –
实际转换的源代码。 – vwegert