2009-05-31 20 views
5

Điều tôi muốn làm là tạo một phần tử trình tự trong một lược đồ XML sao cho các nội dung phải theo thứ tự, nhưng có thể không phải tất cả đều có mặt. Ví dụ, lược đồ sẽ là một cái gì đó như thế này:Làm thế nào bạn có thể tạo một chuỗi các mục tùy chọn phải theo thứ tự trong một lược đồ XML?

<xs:element name="rods" maxOccurs="1" minOccurs="1"> 
<xs:complexType> 
    <xs:sequence> 
    <xs:element name="green" type="xs:positiveInteger" /> 
    <xs:element name="white" type="xs:positiveInteger" /> 
    <xs:element name="blue" type="xs:positiveInteger" /> 
    <xs:element name="yellow" type="xs:positiveInteger" /> 
    <xs:element name="red" type="xs:positiveInteger" /> 
    <xs:element name="tan" type="xs:positiveInteger" /> 
    <xs:element name="gray" type="xs:positiveInteger" /> 
    <xs:element name="black" type="xs:positiveInteger" /> 
    </xs:sequence> 
</xs:complexType> 
</xs:element> 

và sẽ cho phép XML như thế này:

<rods> 
<green>142</green> 
<white>34</white> 
<gray>65</gray> 
</rods> 

MSDN có này để nói về nó:

Ví dụ chương trình sau một phần tử (zooAnimals) có thể có không hoặc nhiều hơn các yếu tố sau, voi, gấu, hươu cao cổ, trong phần tử thứ tự.

<xs:element name="zooAnimals"> 
     <xs:complexType> 
      <xs:sequence minOccurs="0" maxOccurs="unbounded"> 
       <xs:element name="elephant"/> 
       <xs:element name="bear"/> 
       <xs:element name="giraffe"/> 
      </xs:sequence> 
     </xs:complexType> 
</xs:element> 

W3Schools cũng đề xuất như vậy. Tuy nhiên, cả studio trực quan và dịch vụ xác thực trực tuyến đều không thích những gì được đề xuất.

Dưới đây là những gì tôi có vào lúc này:

<xs:element name="rods" maxOccurs="1" minOccurs="1"> 
<xs:complexType> 
    <xs:sequence minOccurs="0" maxOccurs="1"> 
    <xs:element name="green" type="xs:positiveInteger" /> 
    <xs:element name="white" type="xs:positiveInteger" /> 
    <xs:element name="blue" type="xs:positiveInteger" /> 
    <xs:element name="yellow" type="xs:positiveInteger" /> 
    <xs:element name="red" type="xs:positiveInteger" /> 
    <xs:element name="tan" type="xs:positiveInteger" /> 
    <xs:element name="gray" type="xs:positiveInteger" /> 
    <xs:element name="black" type="xs:positiveInteger" /> 
    </xs:sequence> 
</xs:complexType> 
</xs:element> 

Và đây là XML:

<rods> 
<green>142</green> 
<white>34</white> 
<gray>65</gray> 
</rods> 

Visual Studio 2005 tuyên bố rằng "màu xám" không hợp lệ "xanh" dự kiến, vì vậy rõ ràng nó muốn tất cả các trẻ em

Xin cảm ơn,

Eric

+0

Định nghĩa lược đồ của bạn có vẻ phù hợp với tôi. Chăm sóc để chia sẻ kết quả/phản hồi của Visual Studio và trình xác thực trực tuyến? –

+0

Tôi đã thêm kết quả vào bài viết – Eric

Trả lời

10
<xs:element name="rods"> 
    <xs:complexType> 
     <xs:sequence> 
       <xs:element minOccurs="0" name="green" type="xs:positiveInteger" /> 
       <xs:element minOccurs="0" name="white" type="xs:positiveInteger" /> 
       <xs:element minOccurs="0" name="blue" type="xs:positiveInteger" /> 
       <xs:element minOccurs="0" name="yellow" type="xs:positiveInteger" /> 
       <xs:element minOccurs="0" name="red" type="xs:positiveInteger" /> 
       <xs:element minOccurs="0" name="tan" type="xs:positiveInteger" /> 
       <xs:element minOccurs="0" name="gray" type="xs:positiveInteger" /> 
       <xs:element minOccurs="0" name="black" type="xs:positiveInteger" /> 
     </xs:sequence> 
    </xs:complexType> 
</xs:element> 
+0

Cảm ơn, điều đó thực hiện công việc. Không có cách nào để tránh gõ rất nhiều minOccurs = "0", là có? Tôi tự hỏi tại sao W3Schools và MSDN lại nói rằng mã khác hoạt động, khi nó không hoạt động? – Eric

+1

@Eric Cả hai đều là chuỗi, nhưng khác nhau về các chi tiết quan trọng mà bạn muốn. Họ có nghĩa là số không hoặc rất nhiều sự lặp lại của nhóm, nhưng bạn muốn mỗi cá nhân là số không hoặc một. Bạn có quen thuộc với regex không? Lược đồ XML rất giống nhau. Phương pháp của họ là như (e g b) *, nhưng những gì bạn muốn cũng giống như e? g? b? – 13ren

+0

Ah ... Phải hiểu sai những gì MSDN đang nói – Eric

Các vấn đề liên quan