xsd包含可变数量的元素和嵌套元素

时间:2017-05-03 11:29:21

标签: xml xsd

我是关于xsd和xml的新手,因此我很难弄清楚如何解决以下问题。我有一个xml文件,其结构如下:

<?xml version="1.0" encoding="UTF-8"?>
<Package xmlns="http://soap.sforce.com/2006/04/metadata">

    <types>
        <members>ECom_RU_TriggeringSearchController</members>
        <members>ECom_RU_TriggeringSearchControllerTest</members>       
        <members>Ecom_cls_UtilityCaseActions</members>
        <members>Ecom_cls_APAC_CaseActions</members>        
        <members>Ecom_NBA_cls_NBAResultsController</members>
        <members>Ecom_NBA_cls_NBAResultsController_Test</members>           
        <name>ApexClass</name>
    </types>    

    <types>         
        <members>ECom_RU_TriggeringSearch</members>
        <name>ApexPages</name>
    </types> 

    <types>         
        <members>*</members>
        <name>ApexTrigger</name>
    </types> 

    <types>         
        <members>customlabel1</members>
        <members>customlabel2</members>
        <name>CustomLabels</name>
    </types> 

    <types>         
        <members>StaticResource1</members>
        <name>StaticResource</name>
    </types>

    <types>         
        <members>Obj1</members>
        <name>CustomObject</name>
    </types>

    <version>29.0</version>
</Package>

这里要保留的重要一点是,我可以有一个<types>的可变数字,并且在每个<types>内部我可以有一个可变数量的<members>。 我发现这个xsd代表xml文件:

<xs:schema attributeFormDefault="unqualified" elementFormDefault="qualified" targetNamespace="http://soap.sforce.com/2006/04/metadata" xmlns:xs="http://www.w3.org/2001/XMLSchema">
  <xs:element name="Package">
    <xs:complexType>
      <xs:sequence>
        <xs:element name="types" maxOccurs="unbounded" minOccurs="0">
          <xs:complexType>
            <xs:sequence>
              <xs:element type="xs:string" name="members" maxOccurs="unbounded" minOccurs="0"/>
              <xs:element type="xs:string" name="name"/>
            </xs:sequence>
          </xs:complexType>
        </xs:element>
        <xs:element type="xs:float" name="version"/>
      </xs:sequence>
    </xs:complexType>
  </xs:element>
</xs:schema>

我的问题是:尽管我能够使用<types>maxOccurs属性代表可变数量的minOccurs,但我怎样才能在每个<types>内},可变数量为<members>?我知道我也可以使用这些属性(maxOccursminOccurs),但每个<types>内部的数量会有所不同,我需要&#34;某些内容&#34;可以包含一个参数,该参数将替换为在特定<members>元素内使用的<types>的数量。

我希望我在解释中足够明确......

我很感激能够指导解决方案的任何提示。

提前致谢。

1 个答案:

答案 0 :(得分:0)

无法在标准XSD 1.0中完成。在XSD 1.1中,您可以添加表单

的断言
<xsd:assert test="if (name='ApexClass') then count(member)=6 else 
                  if (name='...') then count(member)= 3 else
                  if ...
                  true()"/>