2017-07-31 100 views
1

我想将一个简单的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_tool

enter image description here

这是由程序生成的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

请问您可以添加ST源?显然,你不考虑顶级对象和对象节点... – vwegert

+0

嗨。你的意思是什么? ( 结构体) ? –

+0

实际转换的源代码。 – vwegert

回答

1

当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结构。