簡體   English   中英

忽略 tt:group 標准反序列化中的結束標記

[英]Ignore closing tag in tt:group standard deserialization

根據文檔:

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>

我們將對輸入 XML 進行徹底的迭代,因為 X90 是可選的並且從未找到。 最后一次迭代將包含</X0> 這也與默認序列化匹配,並將跳轉到這種情況。 在結束標記上跳過的結果是CX_ST_MATCH異常。

如何確保只跳過起始標簽?

我不知道<tt:skip.../>是否有解決方案,但是屬性tt:extensible="on"有一個替代方案(也可以使用值deep-staticdeep-dynamic ) ,以便“可以跳過未明確指定的元素而無需進一步處理”:

<X0 tt:extensible="on">
  <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:group>
</X0>

注意: <X1><tt:value ref="ROOT1"/></X1>可以簡化為<X1 tt:value-ref="ROOT1"/>

暫無
暫無

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

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