根据文档:
Only one deserialization-relevant case that does not contain a pattern can be specified.
This case is called standard deserialization.
现在的问题是,在另一个标签中,标准反序列化也将匹配结束标签。
假设我们有以下 xml:
<X0>
<X1>1</X1>
<X1>2</X1>
<X2>3</X2>
<X2>99</X2>
<X2>4</X2>
<X3>5</X3>
<X4>6</X4>
<X2>888</X2>
</X0>.
现在与ST
<X0>
<tt:group>
<tt:cond frq="*">
<X1>
<tt:value ref="ROOT1"/>
</X1>
</tt:cond>
<tt:cond frq="?">
<X90>
<tt:value ref="ROOT4"/>
</X90>
</tt:cond>
<tt:cond frq="*">
<tt:skip count="1"/>
</tt:cond>
</tt:group>
</X0>
由于 X90 是可选的并且从未找到,因此我们将对输入 XML 进行彻底的迭代。最后一次迭代将包含</X0>
. 这也与默认序列化匹配,并将跳转到这种情况。在结束标记上跳过的结果是一个CX_ST_MATCH
例外。
如何确保只跳过起始标签?