2013-04-09 106 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