如果您查看以下xsd片段,您可以得出结论,相应的xml将首先包含汽车,然后是公共汽车,例如:
car,car,bus,bus
但是我希望xml能够包含
car,bus,car,bus
为了实现这一目标,我需要在下面的xsd中进行哪些更改?
<xs:element name="body">
<xs:complexType>
<xs:sequence>
<xs:element name="session" type="tns:session" />
<xs:element minOccurs="0" maxOccurs="unbounded" name="car" type="tns:car" />
<xs:element minOccurs="0" maxOccurs="unbounded" name="bus" type="tns:bus" />
</xs:sequence>
</xs:complexType>
</xs:element>
答案 0 :(得分:0)
这有点麻烦,但你可能会达到你想要的目标:
创建一个<xs:choice>
元素,其中包含汽车和总线元素;这定义了可以使用其中一个包含的元素
确保在minOccurs=1
上设置了maxOccurs=unbounded
和<xs:choice>
- 这可以为您提供任意数量的汽车或公交车元素 - 任意数字,任意组合
所以你的XML模式看起来像这样(我添加了一些东西只是为了能够生成一个示例XML并验证它是否有效 - 根据需要进行调整):
<?xml version="1.0" encoding="utf-8"?>
<xs:schema elementFormDefault="qualified" xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:element name="body">
<xs:complexType>
<xs:choice minOccurs="0" maxOccurs="unbounded">
<xs:element minOccurs="0" maxOccurs="unbounded" name="car" type="CarType" />
<xs:element minOccurs="0" maxOccurs="unbounded" name="bus" type="BusType" />
</xs:choice>
</xs:complexType>
</xs:element>
<xs:complexType name="CarType">
<xs:sequence>
<xs:element name="Maker" type="xs:string" />
</xs:sequence>
</xs:complexType>
<xs:complexType name="BusType">
<xs:sequence>
<xs:element name="Maker" type="xs:string" />
<xs:element name="Capacity" type="xs:int" />
</xs:sequence>
</xs:complexType>
</xs:schema>
答案 1 :(得分:-1)
使用<xs:any>
代替<xs:sequence>