2013-04-09 107 views
0

我一直在努力構建一個XSD文件來驗證一些XMLXSD驗證XML可選的子元素

XSD例

<xs:element name="person" type="persontype"/> 
<xs:complexType name="persontype"> 
    <xs:sequence> 
    <xs:element name="firstname" type="xs:string"/> 
    <xs:element name="lastname" type="xs:string"/> 
    </xs:sequence> 
</xs:complexType> 

XML實例

<persontype> 
    <firstname/> 
    <lastname/> 
</persontype> 

如何我可以構造xsd來要求'firstname'是強制性的,'lastname'不是必需的sary讓xml有效,並且只要層次結構得到尊重,順序就不必按順序排列。

結束可能會遇到的XML的結果,以及我希望根據最終的xsd將其視爲有效的結果。

有效方案1

<persontype> 
    <firstname/> 
</persontype> 

有效方案2

<persontype> 
    <lastname/> 
    <firstname/> 
</persontype> 

欣賞與幫助你的時間。

回答

1

我從XML Schema tutorial on indicators適應這樣的:

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

如果使用all指標,你的元素的順序可以是任意的,但默認情況下每個元素必須正好出現一次。 要使姓氏可選,您可以通過提供minOccurs指示符並將其設置爲零來更改默認名稱。

這將允許您可選地爲每個人指定單個姓氏,以及任何元素的順序。

+0

謝謝GreenSocks。這非常有幫助。對不起,我無法對你表示敬意,菜鳥不能。需要15個rep point> _ < – NinjitsuCoder 2013-04-14 20:20:01