我们通过MS XML 4完成了大量序列化。当我们序列化C ++枚举时,我们使用表将每个可能的值转换为字符串,并将该字符串存储为属性值。当我们反序列化时,我们读取该属性值,将其与表中的所有项进行比较并检索相应的枚举值。如果我们找不到错误。
为了便于外部程序创建XML,我们为所有感兴趣的数据类型发布了XML模式。枚举的属性定义如下:
<xs:complexType>
//other fields here
<xs:attribute name="Color" type="xs:string"></xs:attribute>
</xs:complexType>
它有效,但不包含可能的字符串值的定义。如何为此定义添加可能的值?我是否使用xs:choice?
答案 0 :(得分:3)
不,xs:choice
为模式提供的信息表明“在这个地方,你可以拥有这个或这个或者这个,但不是一个组合”;您可以找到有关xs:choice
here的更多信息。
要创建枚举,您需要根据xs:string
将其定义为restricted type的一部分。
例如:
<xs:simpleType name="ColorType">
<xs:restriction base="xs:string">
<xs:enumeration value="white"/>
<xs:enumeration value="black"/>
<xs:enumeration value="blue"/>
</xs:restriction>
</xs:simpleType>
然后您可以像任何其他类型一样使用此类型:
<xs:complexType>
<xs:attribute name="Color" type="ColorType" />
</xs:complexType>
有关using xs:restriction
和其他XSD元素及属性的详细信息,请查看www.w3schools.com。他们有很多关于网络相关主题的参考指南和教程,如XHTML,XSLT,XPath和XSD(以及javascript和AJAX)。
答案 1 :(得分:0)
<xs:complexType>
//other fields here
<xs:attribute name="Color">
<xs:simpleType>
<xs:restriction base="xs:string">
<xs:enumeration value="RED"/>
<xs:enumeration value="BLUE"/>
<xs:enumeration value="GREEN"/>
</xs:restriction>
</xs:simpleType>
</xs:attribute>
</xs:complexType>
您也可以将其创建为外部类型:
<xs:complexType>
//other fields here
<xs:attribute name="Color" type="Color"/>
</xs:complexType>
<xs:simpleType name="Color">
<xs:restriction base="xs:string">
<xs:enumeration value="RED"/>
<xs:enumeration value="BLUE"/>
<xs:enumeration value="GREEN"/>
</xs:restriction>
</xs:simpleType>
<xs:choice>
完全意味着别的东西。 XML模式中的名称不直观且有些误导。选择意味着其中一个元素。