2017-05-03 165 views
0

我是一個關於xsd和xml的新手,所以我正在努力弄清楚如何解決以下問題。我有以下結構的XML文件:xsd包含可變數量的元素和嵌套元素

<?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> 

我的問題是:儘管我能夠代表使用maxOccursminOccurs屬性<types>可變數目,我怎麼能,每個<types>裏面,有可變數字<members>?我知道我也可以使用這些屬性(maxOccursminOccurs),但每個<types>內部的數量會有所不同,我需要的「某些」可以保存一個參數,該參數將替換爲在該特定的<types>元素內使用的數量<members>

我希望我在我的解釋不夠清楚......

我希望能爭取解決引導的任何提示。

在此先感謝。

+0

如果我理解正確的話,你想有地方的參數將表明你需要多少成員來形容,並檢查''標籤的實際數量你有反對這個參數? – potame

+0

理想情況下,我將定義該參數。我有一個函數,在一個bash腳本中將會通過這兩個參數,其數量爲,這很容易,並且每個的數量爲。問題是我不知道如何建立一個變量數爲的xsd。 –

回答

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()"/>