tt:group标准反序列化误匹配闭合标签,如何仅跳过开始标签
解决方案
你可以通过给<tt:skip>标签添加名称匹配规则,限定仅跳过开始标签,即可避免命中父节点结束标签抛出异常。
默认不带参数的<tt:skip count="1"/>会匹配所有类型的XML节点(包括结束标签、文本节点等),当遍历到<X0>的结束标签时也会进入跳过分支,对结束标签执行跳过操作不符合ST语法规则,因此抛出CX_ST_MATCH异常。
修改方案
将原模板中对应的跳过分支:
<tt:cond frq="*"> <tt:skip count="1"/> </tt:cond>
修改为:
<tt:cond frq="*"> <tt:skip name="*" count="1"/> </tt:cond>
这里的name="*"参数表示仅匹配任意名称的开始标签,不会匹配结束标签,遍历到</X0>时会自动退出当前tt:group的匹配逻辑,不会进入跳过分支,也就不会触发异常。
备选方案
你也可以在跳过分支的tt:cond上添加节点类型匹配限制,显式指定仅对开始标签生效:
<tt:cond frq="*" match="tt:startElement()"> <tt:skip count="1"/> </tt:cond>
两种方案都可以实现仅跳过开始标签的需求,你可以根据实际场景选择。
内容的提问来源于stack exchange,提问作者user6412004
相关产品推荐
相关产品推荐

