我有以下xsd
<xsd:complexType name="myID">
<xsd:choice>
<xsd:element name="testID" type="priv:testID"/>
<xsd:sequence>
<xsd:element name="newID" type="priv:newID"/>
<xsd:element name="testID" type="priv:testID" minOccurs="0"/>
</xsd:sequence>
</xsd:choice>
</xsd:complexType>
所有内容都在priv
命名空间下。问题是看起来myID
是一个联盟。它可能是testID
或带有newID
和testID
的序列。当我使用来自wsdl2h
的{{1}}进行编译时,我正在接收消息:
注意:
gsoap
已嵌入<xs:choice>
或<xs:sequence>
阻止使用联合
以上XSD是否正确?
答案 0 :(得分:0)
通常,XML类型myID
可以按照您的描述进行声明。存在冲突可能与您对类型priv:testID
和priv:testID
的定义有关,而这些类型不包括在内。例如架构
<?xml version="1.0" encoding="utf-8"?>
<xsd:schema targetNamespace="http://www.ok-soft-gmbh.com/xml/xsd/1.0/XMLSchema.xsd"
elementFormDefault="qualified"
xmlns:priv="http://www.ok-soft-gmbh.com/xml/xsd/1.0/XMLSchema.xsd"
xmlns:xsd="http://www.w3.org/2001/XMLSchema"
>
<xsd:simpleType name="testID">
<xsd:restriction base="xsd:string"/>
</xsd:simpleType>
<xsd:simpleType name="newID">
<xsd:restriction base="xsd:string"/>
</xsd:simpleType>
<xsd:complexType name="myID">
<xsd:choice>
<xsd:element name="testID" type="priv:testID"/>
<xsd:sequence>
<xsd:element name="newID" type="priv:newID"/>
<xsd:element name="testID" type="priv:testID" minOccurs="0"/>
</xsd:sequence>
</xsd:choice>
</xsd:complexType>
<xsd:element name="root" type="priv:myID"/>
</xsd:schema>
是正确的。因此,如果存在错误,则不在您发布的部分中。