我正在尝试将简单的xml转换为abap。
我使用交易xslt_tool。
我要转储
Errores tiempo ejec。 ST_MATCH_FAILExcepción
CX_ST_MATCH_ELEMENT Fecha y hora 31.07.2017 18: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.
答案 0 :(得分:1)
当XML中的标记与转换中的标记或顺序不同时,就会发生此转储。
在你的例子中,我看到了多重问题:
您的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>
必须被转换。
同样在错误子结构中,您有一些不匹配
<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结构。