XML 1.1中xs:alternative的正确用法及属性定义疑问
解决xs:alternative中
switchTo属性的定义问题 我来帮你梳理下这个问题的解决思路:
核心问题拆解:报错提示
switchTo属性不允许出现在apply元素里,本质是这个属性没有被正确声明在对应元素的属性规则中,Oxygen XML对XSD语法校验很严格,哪怕功能能正常运行,只要语法上属性未被合法声明,就会抛出这个错误。正确的定义方向:
- 如果
switchTo就是apply元素的专属属性:
你需要在apply元素的xs:complexType定义里明确添加这个属性的声明,示例代码如下:<xs:element name="apply"> <xs:complexType> <!-- 保留你原本的元素内容定义 --> <xs:attribute name="switchTo" type="xs:string" use="required"/> </xs:complexType> </xs:element> - 如果
switchTo是用于触发xs:alternative类型切换的控制属性:
那它必须属于你要做类型切换的目标元素(比如根元素),然后在xs:alternative的test条件里引用这个属性。示例代码如下:
这里要注意:<xs:element name="root"> <xs:complexType> <!-- 保留你原本的基础内容定义 --> <xs:attribute name="switchTo" type="xs:string"/> </xs:complexType> <xs:alternative test="@switchTo='typeA'" type="TypeA"/> <xs:alternative test="@switchTo='typeB'" type="TypeB"/> </xs:element>xs:alternative的test条件是基于目标元素的上下文,所以触发属性必须属于这个目标元素,不能随便放在子元素上。
- 如果
你可以先检查下apply元素是不是你要做类型切换的目标元素?如果不是,那switchTo应该移到真正的目标元素上,同时调整xs:alternative的test条件指向这个属性。
内容的提问来源于stack exchange,提问作者NicoBerrogorry
相关产品推荐
相关产品推荐

