如何在我的xml文件中的限制标记中禁止重复标记? 例如,在我的xml文件中,我有两个locale标记,但它应该只有一个标记
这是我的xml文件:
<app:string name="firstName">
<app:restriction>
<app:regex>^\w*$</app:regex>
<app:type/>
<app:locale/>
<app:locale/>
</app:restriction>
</app:string>
这是我的xsd for string tag:
<xs:element name="string">
<xs:complexType>
<xs:complexContent>
<xs:extension base="main:BaseType">
<xs:sequence>
<xs:element name="restriction" type="main:StringRestriction" minOccurs="0"
maxOccurs="1"/>
</xs:sequence>
<xs:attribute name="lang" type="main:LocaleTypes"/>
</xs:extension>
</xs:complexContent>
</xs:complexType>
</xs:element>
<xs:complexType name="BaseType">
<xs:attribute name="name" type="main:nameType" use="required"/>
<xs:attribute name="readonly" type="xs:boolean" use="optional" default="true"/>
</xs:complexType>
<xs:complexType name="StringRestriction">
<xs:complexContent>
<xs:extension base="main:RestrictionBase">
<xs:sequence>
<xs:choice maxOccurs="1">
<xs:element type="xs:string" name="locale"/>
<xs:element type="xs:string" name="type"/>
<xs:element type="xs:string" name="regex"/>
<xs:element type="xs:string" name="maxLen"/>
<xs:element type="xs:string" name="minLen"/>
</xs:choice>
</xs:sequence>
</xs:extension>
</xs:complexContent>
</xs:complexType>
答案 0 :(得分:1)
如果我理解正确,您需要一个强制restriction
标记包含不重复标记的模式。
如果你替换它:
<xs:sequence>
<xs:choice maxOccurs="1">
<xs:element type="xs:string" name="locale"/>
<xs:element type="xs:string" name="type"/>
<xs:element type="xs:string" name="regex"/>
<xs:element type="xs:string" name="maxLen"/>
<xs:element type="xs:string" name="minLen"/>
</xs:choice>
</xs:sequence>
用这个:
<xs:all minOccurs="0">
<xs:element type="xs:string" name="locale"/>
<xs:element type="xs:string" name="type"/>
<xs:element type="xs:string" name="regex"/>
<xs:element type="xs:string" name="maxLen"/>
<xs:element type="xs:string" name="minLen"/>
</xs:all>
您的架构不允许在locale
代码中包含重复的restriction
元素。
您可以在此处查看摘要:http://www.w3schools.com/schema/el_all.asp
除此之外,您还可以使用minOccurs
和maxOccurs
来强制某些元素始终显示,而其他元素只是可选的。