2011-04-15 26 views
10

我有這樣的xsd。這些所有字段都可以存在或不存在,並且具有不可預知的順序。如何在<xs:all>中使項目可選?

<?xml version="1.0" encoding="UTF-8"?> 
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified"> 

<xs:element name="request"> 
<xs:complexType> 
    <xs:all minOccurs="0"> 
    <xs:element ref="field1"/> 
    <xs:element ref="field2"/> 
    <xs:element ref="field3"/> 
    <xs:element ref="field4"/> 
    <xs:element ref="field5"/> 
    </xs:all> 
</xs:complexType> 
</xs:element> 

</xs:schema> 

字段4不存在XML和確認說,他正在等待字段4,但他不應該這樣說。那麼,什麼是錯的?

w3cschools.com說上述

<xs:element name="person"> 
<xs:complexType> 
<xs:all minOccurs="0"> 
    <xs:element name="firstname" type="xs:string"/> 
    <xs:element name="lastname" type="xs:string"/> 
</xs:all> 
</xs:complexType> 
</xs:element> 

的例子表示的是,「姓名」和「姓」元素可以以任何順序出現,並且每個元素可以出現零個或一個時間!

+0

向我們展示一個鏈接到該實例。 – skaffman 2011-04-15 13:14:01

+0

http://www.w3schools.com/Schema/el_all.asp W3C很爛 – 2011-04-15 13:17:55

+1

w3schools的東西很糟糕,而且經常是錯的。忽略它。讓我看看w3.org的一個真實例子,就像我鏈接到的那個例子。 – skaffman 2011-04-15 13:19:35

回答

15

你需要把對個人的元素,而不是<xs:all>minOccurs,即

<xs:all> 
    <xs:element ref="field1" minOccurs="0"/> 
    <xs:element ref="field2" minOccurs="0"/> 
    <xs:element ref="field3" minOccurs="0"/> 
    <xs:element ref="field4" minOccurs="0"/> 
    <xs:element ref="field5" minOccurs="0"/> 
</xs:all> 

把對<xs:all>minOccurs="0"是說,整個組可以被省略,而不是單個的元素。

請參閱XML Schema docs

+0

謝謝,但這不起作用。是的,現在它工作。再次感謝 – 2011-04-15 13:13:22

+5

@ Shikarn-O:那個評論意味着什麼? – 2012-01-04 06:05:12

3

嘗試像這樣在所有

<xs:element ref="field4" minOccurs="0" > 
相關問題