2017-07-31 10 views
1

私は単純なxmlをabapに変換しようとしています。コール変換xml to abap

iamトランザクションxslt_toolを使用します。

私はダンプ

Erroresティエンポejecを取得メートル。 ST_MATCH_FAILExcepción
CX_ST_MATCH_ELEMENT FechaのYのホラ2017年7月31日午後6時55分46秒

あなたたちは私が間違っているのWAHTを教えてもらえ??

これは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

こんにちは。あなたはstと何を意味しますか? (構造)? –

+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>をスワップする必要があります。 <row>名前を付ける必要があり

また、エラー下部にあなたには、いくつかの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>名前を付ける必要があります。

重要なルールは、xmlファイルの名前と序列が同じであることです(大文字と小文字は区別されないため、<OBJECT>または<object>の場合は問題ありません)。

私の側からの助言は、変換をデバッグすることです。一歩一歩進み、名前や順序が大丈夫ではない時代の大部分をダンプするタグによって。だから、あなたはエラーを早く見つけることができ、XML構造全体を比較する必要はありません。