![](/img/trans.png)
[英]Use multiple namespaces in single XML element through ABAP Simple Transformation
[英]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>
這是程序生成的:
<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.