我有一些XML:
<common>
<parameter>
<name>Param1</name>
<value>Value1</value>
</parameter>
<parameter>
<name>Param2</name>
<value>Value2</value>
</parameter>
</common>
我需要验证确切的2个参数,确切的2个名称:Param1,Param2。
<?xml version="1.0" encoding="utf-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:element name="common" type="CommonType" />
<xs:complexType name="CommonType">
<xs:sequence>
<xs:element name="parameter" type="ParameterType" maxOccurs="unbounded" minOccurs="0" />
</xs:sequence>
</xs:complexType>
<xs:complexType name="ParameterType">
<xs:sequence>
<xs:element name="name" type="ParameterNameType"/>
<xs:element name="value" type="xs:string"/>
</xs:sequence>
</xs:complexType>
<xs:simpleType name="ParameterNameType">
<xs:restriction base="xs:normalizedString">
<xs:enumeration value="Param1" minOccurs="1" />
<xs:enumeration value="Param2" minOccurs="1" />
</xs:restriction>
</xs:simpleType>
</xs:schema>
在限制部分中,minOccurs
属性在XSD中无效。我该如何实现这样的功能?
答案 0 :(得分:1)
<?xml version="1.0" encoding="utf-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:element name="common">
<xs:complexType>
<xs:sequence>
<xs:element name="parameter" type="ParameterType" maxOccurs="2" minOccurs="2" />
</xs:sequence>
</xs:complexType>
<xs:unique name="uniqueAuthor">
<xs:selector xpath="parameter"/>
<xs:field xpath="name"/>
</xs:unique>
</xs:element>
<xs:complexType name="ParameterType">
<xs:sequence>
<xs:element name="name" type="ParameterNameType"/>
<xs:element name="value" type="xs:string"/>
</xs:sequence>
</xs:complexType>
<xs:simpleType name="ParameterNameType">
<xs:restriction base="xs:normalizedString">
<xs:enumeration value="Param1"/>
<xs:enumeration value="Param2" />
</xs:restriction>
</xs:simpleType>
</xs:schema>
答案 1 :(得分:0)
为什么要将参数的名称指定为元素的值?为什么不将它们指定为元素的名称?在这种情况下,所需的声明是微不足道的。