使用xsd-cvc length valid错误使元素可选
但如果我的值为空,它将返回一个错误 cvc长度有效:长度为“0”的值“”对于类型“#AnonType_CurrencyCodeServiceList”的长度“3”无效使用xsd-cvc length valid错误使元素可选,xsd,Xsd,但如果我的值为空,它将返回一个错误 cvc长度有效:长度为“0”的值“”对于类型“#AnonType_CurrencyCodeServiceList”的长度“3”无效 那么我该如何处理它呢?您的模式允许省略CurrencyCode元素,但如果它存在,则其值必须是长度正好为3个字符的字符串 您可以通过指定“最小长度”和“最大长度”来削弱允许0长度值的限制: <xs:element name="CurrencyCode" minOccurs="0"> <xs:simpleTyp
那么我该如何处理它呢?您的模式允许省略
CurrencyCode
元素,但如果它存在,则其值必须是长度正好为3个字符的字符串
您可以通过指定“最小长度”和“最大长度”来削弱允许0长度值的限制:
<xs:element name="CurrencyCode" minOccurs="0">
<xs:simpleType>
<xs:restriction base="xs:string">
<xs:length value="3" />
</xs:restriction>
</xs:simpleType>
</xs:element>
但是,这将允许使用“EU”等不是有效货币代码的值
另一种方法是,指定有效货币代码值列表并将空字符串作为有效代码:
<xs:element name="CurrencyCode" minOccurs="0">
<xs:simpleType>
<xs:restriction base="xs:string">
<xs:minLength value="0" />
<xs:maxLength value="3" />
</xs:restriction>
</xs:simpleType>
</xs:element>
元素是可选的。与其使用空值,最明显的做法是,如果不想为整个元素提供任何实际值,只需删除整个元素
如果出于某种原因仍希望允许空字符串和3个字符长的字符串,则至少有3个选项不需要削弱限制或列出所有可能的值(=无枚举)
解决方案1,使用正则表达式进行限制
使用允许空字符串和所有3个字符长字符串的正则表达式限制元素值
<xs:element name="CurrencyCode" minOccurs="0">
<xs:simpleType>
<xs:restriction base="xs:string">
<xs:enumeration value=""/>
<xs:enumeration value="USD"/>
<xs:enumeration value="GBP"/>
<xs:enumeration value="EUR"/>
<!-- add all currency codes you need -->
</xs:restriction>
</xs:simpleType>
</xs:element>
实例XML中的用法:
<xs:element minOccurs="0" name="CurrencyCode-nil" nillable="true">
<xs:simpleType>
<xs:restriction base="xs:string">
<xs:length value="3" />
</xs:restriction>
</xs:simpleType>
</xs:element>
解决方案3,定义一个默认值
为模式中的元素添加合适的默认值。默认值还必须满足元素值的限制。在模式验证之后,仅当元素内容为空时,才会将默认值添加到已解析的XML树中
<!-- This causes a validation error -->
<CurrencyCode-nil></CurrencyCode-nil>
验证前的XML实例:
<xs:element minOccurs="0" default="XXX" name="CurrencyCode-default">
<xs:simpleType>
<xs:restriction base="xs:string">
<xs:length value="3" />
</xs:restriction>
</xs:simpleType>
</xs:element>
<CurrencyCode-default></CurrencyCode-default>
模式验证后如何解释实例文档:
<xs:element minOccurs="0" default="XXX" name="CurrencyCode-default">
<xs:simpleType>
<xs:restriction base="xs:string">
<xs:length value="3" />
</xs:restriction>
</xs:simpleType>
</xs:element>
<CurrencyCode-default></CurrencyCode-default>
XXX
下面是一个示例模式和一个对该模式有效的示例XML文档
模式:
<CurrencyCode-default>XXX</CurrencyCode-default>
有效的实例文档:
<xs:schema elementFormDefault="qualified" xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:element name="root">
<xs:complexType>
<xs:sequence maxOccurs="2">
<xs:element minOccurs="0" name="CurrencyCode-regex">
<xs:simpleType>
<xs:restriction base="xs:string">
<xs:pattern value="|.{3}" />
</xs:restriction>
</xs:simpleType>
</xs:element>
<xs:element minOccurs="0" name="CurrencyCode-nil" nillable="true">
<xs:simpleType>
<xs:restriction base="xs:string">
<xs:length value="3" />
</xs:restriction>
</xs:simpleType>
</xs:element>
<xs:element minOccurs="0" default="XXX" name="CurrencyCode-default">
<xs:simpleType>
<xs:restriction base="xs:string">
<xs:length value="3" />
</xs:restriction>
</xs:simpleType>
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:schema>
基础知识
基础知识
基础知识
<root xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<CurrencyCode-regex>ABC</CurrencyCode-regex>
<CurrencyCode-nil>ABC</CurrencyCode-nil>
<CurrencyCode-default>ABC</CurrencyCode-default>
<CurrencyCode-regex></CurrencyCode-regex>
<CurrencyCode-nil xsi:nil="true"></CurrencyCode-nil>
<CurrencyCode-default></CurrencyCode-default>
</root>