2011-09-07 135 views
0

嗨,我需要为xml创建一个xsd,其中有许多名称列和行的元素。XSD如何将maxOccurs设置为之前元素值的值

请提出XSD,我已经把cols当成无界的,应该如何制作元素行。

<cols> 
    <id>a</id> 
    <type>string</type> 
</cols> 
<cols> 
    <id>b</id> 
    <type>string</type> 
</cols> 
<cols> 
    <id>c</id> 
    <type>number</type> 
</cols> 
<rows> 
    <c> 
     <v>a</v> 
    </c> 
    <c> 
     <v>b</v> 
    </c> 
    <c> 
     <v>3</v> 
    </c> 
</rows> 
<rows> 
    <c> 
     <v>c</v> 
+0

请编辑重组你的问题,实在是太模糊你的XML数据的格式。更加详细一些。发布迄今为止获得的XSD。 –

回答

0

您发布的XML样本不会对任何模式有效。事实上xml不应该有多个根节点(就像你的例子那样)。您需要将这些包装在一个根节点中。

在回答你的问题时,xsd不支持像你假设的节点集中的节点数量的条件的属性值。你可以做的最好的事情就是使用unbounded为你的maxOccurs。

你想将类似于这样的模式:

<xs:schema xmlns="http://mynamespace" targetNamespace="http://mynamespace" xmlns:xs="http://www.w3.org/2001/XMLSchema"> 
    <xs:element name="Root"> 
    <xs:complexType> 
     <xs:sequence> 
     <xs:element maxOccurs="unbounded" name="cols"> 
      <xs:complexType> 
      <xs:sequence> 
       <xs:element name="id" type="xs:string" /> 
       <xs:element name="type" type="xs:string" /> 
      </xs:sequence> 
      </xs:complexType> 
     </xs:element> 
     <xs:element maxOccurs="unbounded" name="rows"> 
      <xs:complexType> 
      <xs:sequence> 
       <xs:element name="c"> 
       <xs:complexType> 
        <xs:sequence> 
        <xs:element name="v" type="xs:string" /> 
        </xs:sequence> 
       </xs:complexType> 
       </xs:element> 
      </xs:sequence> 
      </xs:complexType> 
     </xs:element> 
     </xs:sequence> 
    </xs:complexType> 
    </xs:element> 
</xs:schema> 

希望这有助于你

相关问题