我有以下XML元素。 我需要验证参数属性是否仅包含以下XML元素中的Y或N
<Test Script="abc.sh" Parameter="Y"/>
**OR**
<Test Script="abc.sh" Parameter="N"/>
我的XSD是:
<xs:element name="Test" minOccurs="0">
<xs:complexType>
<xs:attribute name="Script" type="xs:string" use="required"/>
<xs:attribute name="Parameter" type="xs:string" use="optional"/>
</xs:complexType>
</xs:element>
目前此XSD未验证参数是否持有 Y 或 N
答案 0 :(得分:4)
您需要定义attribute
,simpleType
代表restriction
,以强制属性值为定义的值集合的成员。
想象一下,你有以下xml:
<?xml version="1.0"?>
<Test Script="path/to/script" Parameter="Y" xmlns="http://www.example.org" />
您可以使用此xsd强制type
属性的值为foo
或bar
:
<?xml version="1.0"?>
<xsd:schema
xmlns:xsd="http://www.w3.org/2001/XMLSchema"
xmlns:tns="http://www.example.org"
targetNamespace="http://www.example.org"
elementFormDefault="qualified"
attributeFormDefault="unqualified"
>
<xsd:element name="Test">
<xsd:complexType>
<xsd:attribute name="Script" type="xsd:string" use="required"/>
<!-- the following has no type attribute. It's type is
defined in the simpleType child -->
<xsd:attribute name="Parameter" use="optional">
<xsd:simpleType>
<!-- define a set of xsd:strings
as possible values -->
<xsd:restriction base="xsd:string">
<xsd:enumeration value="Y"/>
<xsd:enumeration value="N"/>
</xsd:restriction>
</xsd:simpleType>
</xsd:attribute>
</xsd:complexType>
</xsd:element>
</xsd:schema>
答案 1 :(得分:2)
你必须像这样定义你的参数属性
<xs:simpleType name="yesno">
<xs:restriction base="xs:string">
<xs:enumeration value="Y" />
<xs:enumeration value="N" />
</xs:restriction>
</xs:simpleType>
<xs:attribute name="Parameter" type="xs:yesno" use="optional"/>
答案 2 :(得分:1)
试试这个:
<xs:element name="Test" maxOccurs="unbounded">
<xs:complexType>
<xs:attribute name="Script">
<xs:simpleType>
<xs:restriction base="xs:string">
<xs:enumeration value="abc.sh">
</xs:enumeration>
</xs:restriction>
</xs:simpleType>
</xs:attribute>
<xs:attribute name="Parameter">
<xs:simpleType>
<xs:restriction base="xs:string">
<xs:pattern value="Y|N" >
</xs:pattern>
</xs:restriction>
</xs:simpleType>
</xs:attribute>
</xs:complexType>
</xs:element>