Thi*_*esh 8 xml validation xsd restriction
如何验证具有属性的元素的文本长度.例如:
<sport code="FB">Football</sport>
Run Code Online (Sandbox Code Playgroud)
现在我需要限制代码属性的可能值(如"FB","BB","TT"),还需要限制文本的可能值和长度("Football","BasketBall"," TableTennis")以及这些文本的最大长度("Football","BasketBall","TableTennis")可以是20.
我试过了
<complexType name="sport">
<simpleContent>
<extension base="string">
<attribute name="code" type="code" />
</extension>
</simpleContent>
</complexType>
<simpleType name="code">
<restriction base="string">
<enumeration value="FB" />
<enumeration value="BB" />
<enumeration value="TT" />
</restriction>
</simpleType>
Run Code Online (Sandbox Code Playgroud)
但我无法验证文本"Foolball"的长度(也可能是值)你能否帮助解决如何验证代码和文本.谢谢
Chr*_*ris 14
我有同样的问题,当我看到有一个公认的答案时,我很有希望.但是,这个答案正是我试过的,但是我得到了一个架构无效的错误.显然,你不能限制simpleContent
内complexType
,只有扩展它.此外,你不能同时拥有一个属性和simpleContent
内complexType
.在办公室周围的书籍中搜索示例,我想出了一个修复程序,我适应了这个问题,以防将来有人遇到这个问题:
<?xml version="1.0" encoding="ISO-8859-1" ?>
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema"
xmlns:sp="http://www.ckhrysze.net/sports/1.0"
targetNamespace="http://www.ckhrysze.net/sports/1.0"
>
<xsd:element name="sports">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="sport" type="sp:sportType" minOccurs="1" maxOccurs="unbounded" />
</xsd:sequence>
</xsd:complexType>
</xsd:element>
<xsd:complexType name="sportType">
<xsd:simpleContent>
<xsd:extension base="sp:sportEnumeration">
<xsd:attribute name="code" type="sp:codeEnumeration" />
</xsd:extension>
</xsd:simpleContent>
</xsd:complexType>
<xsd:simpleType name="sportEnumeration">
<xsd:restriction base="xsd:string">
<xsd:enumeration value="Football" />
<xsd:enumeration value="Basketball" />
</xsd:restriction>
</xsd:simpleType>
<xsd:simpleType name="codeEnumeration">
<xsd:restriction base="xsd:string">
<xsd:enumeration value="FB" />
<xsd:enumeration value="BB" />
</xsd:restriction>
</xsd:simpleType>
</xsd:schema>
Run Code Online (Sandbox Code Playgroud)