2010-06-30 124 views
0

我有一个XML架构,看起来像这样:XSD:不允许空元素

<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"> 
    <xs:element name="root"> 
     <xs:complexType> 
      <xs:sequence> 
       <xs:element name="A" minOccurs="0" maxOccurs="1"/> 
       <xs:element name="B" minOccurs="0" maxOccurs="1"/> 
       <xs:element name="C" minOccurs="0" maxOccurs="32"/> 
      </xs:sequence> 
     </xs:complexType> 
    </xs:element> 
</xs:schema> 

下是有效的,根据这个模式:

<root xsi:noNamespaceSchemaLocation="MySchema.xsd" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> 
</root> 

不过,我想使以上XML无效。

更具体而言,我想要求: 1.该<root>具有至少一个子元素,无论是一个<A>,一个<B><C>,和 2.该<root>具有至多一个<A>孩子,最多一个<B>孩子。

对此提出建议?


解决办法是:

<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"> 
    <xs:element name="root"> 
     <xs:complexType> 
      <xs:choice> 
       <xs:sequence> 
        <xs:element name="A"/> 
        <xs:element name="B" minOccurs="0"/> 
        <xs:element name="C" minOccurs="0" maxOccurs="32"/> 
       </xs:sequence> 
       <xs:sequence> 
        <xs:element name="B"/> 
        <xs:element name="C" minOccurs="0" maxOccurs="32"/> 
       </xs:sequence> 
       <xs:sequence> 
        <xs:element name="C" minOccurs="1" maxOccurs="32"/> 
       </xs:sequence> 
      </xs:choice> 
     </xs:complexType> 
    </xs:element> 
</xs:schema> 

回答

0

如何准确地使用一个xs:选择A,B或C,然后再选择0个或更多个?

啊,你的编辑必须是类似于A,AB或B的选择,然后是0到32 Cs。是?

+0

你的建议让我回答了凯特。谢谢! – JaysonFix 2010-07-01 13:45:39

0

你有没有尝试添加minOccurrs=1xs:sequence