空可选元素错误?

时间:2016-02-29 07:00:09

标签: xml xsd xsd-validation xml-validation

我有一个元素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,我会收到以下错误:

  

引起:org.xml.sax.SAXParseException; lineNumber:0; columnNumber:0;   cvc-minLength-valid:对于'标签'类型,值''(长度='0'对于minLength'1'而言不是facet-valid。

据我所知,如果minOccurs=0并且我没有设置元素,则不应该给出任何错误,因为它是可选的。

3 个答案:

答案 0 :(得分:1)

  

minLength&#39; 1&#39;对于类型&#39;标签&#39;。

这是逻辑,如果你没有使用labels,它在<xs:minLength value="1" />得到值0,是你的问题。更改它或设置一个值。 如果<xs:restriction>是字符串,请将<xs:restriction base="xs:string">更改为<{1}}。

答案 1 :(得分:1)

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文档,因为它允许

  1. labels根据minOccurs="0"
  2. 缺席
  3. labels每个minLength="0"显示空内容(不是1,这会导致您收到错误。)
  4. XML,没有labels

    <x2x:root/>
    

    XML,空labels

    <x2x:root>
      <labels/>
    </x2x:root>
    

答案 2 :(得分:0)

问题是我发送元素,但默认情况下它们被设置为空列表。因此存在例外,因为minLen="1"不接受空元素,并且在设置元素时满足minoccurs="0"(occurenece为真)。