迁移11g BPEL至12c时遇XML-22029错误:choose中无法转换otherwise子元素
解决XML-22029错误:XSL 1.0中标签的语法问题
错误原因
XSL 1.0对<choose>标签的语法有严格要求:
<choose>的直接子元素只能是<when>和最多一个<otherwise><otherwise>必须放在所有<when>之后,且内部不能嵌套<when>(<when>仅能作为<choose>的直接子元素)
你提供的代码存在两个违反规则的问题:
- 出现了两个
<otherwise>标签,超出XSL 1.0允许的数量上限 <otherwise>内部嵌套了<when>标签,不符合标签层级要求
修正方案
调整代码结构,严格遵循<choose>的语法规范:
- 所有
<when>作为<choose>的直接子元素,按条件优先级排序 - 仅保留一个
<otherwise>,置于所有<when>之后,作为默认分支
修正后的示例代码
<choose> <!-- 第一个条件分支(需补充test属性定义匹配条件) --> <when test="条件1"> <element/> </when> <!-- 第二个条件分支(替代原otherwise内的when,需补充test属性) --> <when test="条件2"> <element/> </when> <!-- 唯一的默认分支 --> <otherwise> <element/> </otherwise> </choose>
关键注意事项
- 每个
<when>必须通过test属性定义匹配条件(原示例代码中缺失,实际使用时必须补充) - 条件分支按顺序匹配,一旦某个
<when>的test条件成立,后续分支将不再执行
内容的提问来源于stack exchange,提问作者Pritish Sharma
相关产品推荐
相关产品推荐

