开发者

Question about xsd. Elements inside complex type must be allowed in any order

If you look at the following xsd fragment you can conclude that the corresponding xml will first contain cars followed by busses eg:

car,car,bus,bus

HOWEVER I want the xml to be able to contain

car,bus,car,bus

What change do I need to make in the xsd below in order to achieve this?

<xs:element name="body">
   <xs:complexType>
      <xs:sequence>
         <xs:element name="session" type="tns:session" />
         <xs:element minOccurs="0" maxOccurs="unbounded" 开发者_StackOverflow社区name="car" type="tns:car" />
         <xs:element minOccurs="0" maxOccurs="unbounded" name="bus" type="tns:bus" />
      </xs:sequence>
   </xs:complexType>
</xs:element>


It's a bit cumbersome, but you might achieve what you're looking for like this:

  • create a <xs:choice> element with your car and bus elements inside; this defines that one of the contained elements can be used

  • make sure to have the attribtues minOccurs=1 and maxOccurs=unbounded on that <xs:choice> - this gives you any number of either car or bus elements - any number, any combination

So your XML schema would look something like this (I added some stuff just to be able to generate a sample XML and verify it works - tweak as needed):

<?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>


use <xs:any> insted of <xs:sequence>

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜