簡體   English   中英

ABAP簡單轉換中的CX_ST_MATCH_ELEMENT

[英]CX_ST_MATCH_ELEMENT in ABAP Simple Transformation

我正在嘗試將簡單的 XML 轉換為 ABAP 並使用事務XSLT_TOOL 我得到的轉儲

錯誤時間彈出。 ST_MATCH_FAIL 異常
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_工具

在此處輸入圖像描述

這是程序生成的:

<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 中的標簽與轉換中的標簽名稱或順序不同時,就會發生此轉儲。

在您的示例中,我看到了多個問題:

您的 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 結構。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM