空可选元素错误?
Empty optional element error?
我有一个元素 labels
,其 minoccurs="0"
和 minLength="1"
。
<xs:element name="labels" type="x2x:labels" minOccurs="0" />
<xs:simpleType name="labels">
<xs:restriction>
<xs:simpleType>
<xs:list itemType="xs:token" />
</xs:simpleType>
<xs:minLength value="1" />
</xs:restriction>
</xs:simpleType>
未设置 labels
时出现以下错误:
Caused by: org.xml.sax.SAXParseException; lineNumber: 0; columnNumber: 0;
cvc-minLength-valid: Value '' with length = '0' is not facet-valid with respect to minLength '1' for type 'labels'.
据我所知,如果 minOccurs=0
而我没有设置该元素,则不应给出任何错误,因为它是可选的。
minLength '1' for type 'labels'.
这是逻辑,如果你没有使用labels
,它得到值0,在<xs:minLength value="1" />
,是你的问题。更改它或设置一个值。
如果是字符串,请将 <xs:restriction>
更改为 <xs:restriction base="xs:string">
。
XSD
以下XSD:
<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"
xmlns:x2x="http://www.example.com/x2x"
targetNamespace="http://www.example.com/x2x">
<xs:element name="root">
<xs:complexType>
<xs:sequence>
<xs:element name="labels" type="x2x:labels" minOccurs="0" />
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:simpleType name="labels">
<xs:restriction>
<xs:simpleType>
<xs:list itemType="xs:token" />
</xs:simpleType>
<xs:minLength value="0" />
</xs:restriction>
</xs:simpleType>
</xs:schema>
成功验证了以下两个 XML 文档,因为它允许
labels
根据 minOccurs="0"
缺席,
labels
根据 minLength="0"
显示空内容(不是 1
,这会导致您收到错误)。
XML,没有labels
<x2x:root/>
XML,空labels
<x2x:root>
<labels/>
</x2x:root>
问题是我发送了 empty 元素,即默认情况下它们被设置为空列表。因此存在异常,因为 minLen="1"
不接受空元素,并且 minoccurs="0"
在设置元素时得到满足(occurenece 为真)。
我有一个元素 labels
,其 minoccurs="0"
和 minLength="1"
。
<xs:element name="labels" type="x2x:labels" minOccurs="0" />
<xs:simpleType name="labels">
<xs:restriction>
<xs:simpleType>
<xs:list itemType="xs:token" />
</xs:simpleType>
<xs:minLength value="1" />
</xs:restriction>
</xs:simpleType>
未设置 labels
时出现以下错误:
Caused by: org.xml.sax.SAXParseException; lineNumber: 0; columnNumber: 0; cvc-minLength-valid: Value '' with length = '0' is not facet-valid with respect to minLength '1' for type 'labels'.
据我所知,如果 minOccurs=0
而我没有设置该元素,则不应给出任何错误,因为它是可选的。
minLength '1' for type 'labels'.
这是逻辑,如果你没有使用labels
,它得到值0,在<xs:minLength value="1" />
,是你的问题。更改它或设置一个值。
如果是字符串,请将 <xs:restriction>
更改为 <xs:restriction base="xs:string">
。
XSD
以下XSD:
<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"
xmlns:x2x="http://www.example.com/x2x"
targetNamespace="http://www.example.com/x2x">
<xs:element name="root">
<xs:complexType>
<xs:sequence>
<xs:element name="labels" type="x2x:labels" minOccurs="0" />
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:simpleType name="labels">
<xs:restriction>
<xs:simpleType>
<xs:list itemType="xs:token" />
</xs:simpleType>
<xs:minLength value="0" />
</xs:restriction>
</xs:simpleType>
</xs:schema>
成功验证了以下两个 XML 文档,因为它允许
labels
根据minOccurs="0"
缺席,labels
根据minLength="0"
显示空内容(不是1
,这会导致您收到错误)。
XML,没有labels
<x2x:root/>
XML,空labels
<x2x:root>
<labels/>
</x2x:root>
问题是我发送了 empty 元素,即默认情况下它们被设置为空列表。因此存在异常,因为 minLen="1"
不接受空元素,并且 minoccurs="0"
在设置元素时得到满足(occurenece 为真)。