如何通过ComplexType测试替代类型?
例如,我有ComplexType“client”:
<xs:complexType name="client">
<xs:sequence>
<xs:element name="clientId" type="xs:long"/>
<xs:element name="name" type="xs:string"/>
</xs:sequence>
</xs:complexType>
并且createOrderRequest:
<xs:element name="createOrderRequest">
<xs:complexType>
<xs:sequence>
<xs:element name="client">
<xs:alternative type="client"/>
<xs:alternative type="xs:long"/>
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
如何测试替代品是xs:long还是复杂类型“client”?
答案 0 :(得分:2)
XSD 1.1中的类型替代方案总是基于测试相关元素的属性值。请参阅规范中的示例:
<xs:element name="message" type="messageType">
<xs:alternative test="@kind='string'" type="messageTypeString"/>
<xs:alternative test="@kind='base64'" type="messageTypeBase64"/>
<xs:alternative test="@kind='binary'" type="messageTypeBase64"/>
<xs:alternative test="@kind='xml'" type="messageTypeXML"/>
<xs:alternative test="@kind='XML'" type="messageTypeXML"/>
<xs:alternative type="messageType"/>
</xs:element>
所以你总是通过查看属性来了解你所拥有的类型。
当然,如果您使用的语言可以访问PSVI信息,那么您也可以直接测试类型,例如在模式感知XPath中可以执行
if (message instance of element(message, messageTypeBase64)) then...