[英]Simple Transformation deserialization: Match Element Error
我必须将以下 XML 解析为内部表,在运行程序后得到简短的转储。 请看下面的程序和简单的转换。 简单转换中出现异常,下面详细说明。
分配给“CX_ST_MATCH_ELEMENT”类的异常未被捕获,因此导致运行时错误。
出现异常的原因是:
XML 匹配错误预期为元素结束:“总计”[] 读取为元素开始:“称重”
我的 XML:
CONCATENATE '<Automatic>'
' <Weighing Tolerance="5" Deviation="1.60" >'
' <Substance ExtId="3" Speed="1" />'
' <Substance ExtId="22" Speed="5" />'
' </Weighing>'
' <Weighing Tolerance="5" Deviation="-16" >'
' <Substance ExtId="22" Speed="5" />'
' </Weighing>'
' <Weighing Tolerance="5" >'
' <Substance ExtId="22" Speed="5" />'
' </Weighing>'
' <Total State="0" Result="Ok" />'
' </Automatic>'
INTO DATA(xml).
程序:
* Substance *
TYPES: BEGIN OF ty_data,
ExtId TYPE CHAR20,
Speed TYPE CHAR20,
END OF ty_data.
DATA: wa_ty_data TYPE ty_data,
lt_data TYPE TABLE OF ty_data.
* Total *
TYPES: BEGIN OF ty_data3,
State TYPE CHAR20,
Result TYPE CHAR20,
END OF ty_data3.
DATA: wa_ty_data3 TYPE ty_data3,
lt_data3 TYPE TABLE OF ty_data3.
* Weighing *
TYPES: BEGIN OF ty_data2,
Tolerance TYPE CHAR20,
Deviation TYPE CHAR20,
t_data TYPE TABLE OF ty_data WITH DEFAULT KEY,
t_data3 TYPE TABLE OF ty_data3 WITH DEFAULT KEY,
END OF ty_data2.
DATA: wa_ty_data2 TYPE ty_data2,
lt_data2 TYPE TABLE OF ty_data2.
CALL TRANSFORMATION zpp_tt_exampletest_st
SOURCE XML xml
RESULT xml_tab = lt_data2.
ZPP_TT_EXAMPLETEST_ST 转换:
<?sap.transform simple?>
<tt:transform xmlns:tt="http://www.sap.com/transformation-templates">
<tt:root name="XML_TAB"/>
<tt:template>
<Automatic>
<tt:loop name="b" ref=".XML_TAB">
<Weighing>
<tt:cond check="not-initial($b.TOLERANCE)">
<tt:attribute name="Tolerance" value-ref="$b.TOLERANCE"/>
</tt:cond>
<tt:cond check="not-initial($b.DEVIATION)">
<tt:attribute name="Deviation" value-ref="$b.DEVIATION"/>
</tt:cond>
<tt:loop name="a" ref="$b.T_DATA">
<Substance>
<tt:cond check="not-initial($a.EXTID)">
<tt:attribute name="ExtId" value-ref="$a.EXTID"/>
</tt:cond>
<tt:cond check="not-initial($a.SPEED)">
<tt:attribute name="Speed" value-ref="$a.SPEED"/>
</tt:cond>
</Substance>
</tt:loop>
<Total>
<tt:cond check="not-initial($b.STATE)">
<tt:attribute name="State" value-ref="$b.STATE"/>
</tt:cond>
<tt:cond check="not-initial($b.RESULT)">
<tt:attribute name="Result" value-ref="$b.RESULT"/>
</tt:cond>
</Total>
</Weighing>
</tt:loop>
</Automatic>
</tt:template>
</tt:transform>
提前谢谢了。
XML 和 ST 之间存在不匹配。 在您的 XML 中, <Total>
位于所有<Weighing>
元素之后,但在您的简单转换中, <Total>
被定义在<Weighing>
元素内。
在 T.Ars 请求之后,编辑以跨越 T,考虑到要纠正的 ST,移动</Weighing></tt:loop>
- 当然,这是从这个 XML 示例中推断出的一种可能性,它可能是在其他 XML 的情况下是错误的(例如 Weighing 和 Total 元素的随机顺序),因此理论上只能基于 XML 模式(XSD,它定义 XML 的语法)提供 ST,而不是基于一个 XML 示例:
你有什么:
</tt:loop>
<Total>
<tt:cond check="not-initial($b.STATE)">
<tt:attribute name="State" value-ref="$b.STATE"/>
</tt:cond>
<tt:cond check="not-initial($b.RESULT)">
<tt:attribute name="Result" value-ref="$b.RESULT"/>
</tt:cond>
</Total>
</Weighing>
</tt:loop>
</Automatic>
你应该做什么:
</Weighing>
</tt:loop>
<Total>
<tt:cond check="not-initial($b.STATE)">
<tt:attribute name="State" value-ref="$b.STATE"/>
</tt:cond>
<tt:cond check="not-initial($b.RESULT)">
<tt:attribute name="Result" value-ref="$b.RESULT"/>
</tt:cond>
</Total>
</Automatic>
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.