我是关于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>
?我知道我也可以使用这些属性(maxOccurs
和minOccurs
),但每个<types>
内部的数量会有所不同,我需要&#34;某些内容&#34;可以包含一个参数,该参数将替换为在特定<members>
元素内使用的<types>
的数量。
我希望我在解释中足够明确......
我很感激能够指导解决方案的任何提示。
提前致谢。
答案 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()"/>