XSD属性NILLABLE无法正常工作

sub*_*ike 9 xml xsd xsd-validation

我正在努力获取一个xml文件来验证XSD架构,我在验证时遇到问题.每当我确认我得到错误说

"架构有效性错误:元素'{http://services.website.com/ProgramResponse}Population':''不是原子类型'xs:double'的有效值."

我相信这个错误发生是因为我在该字段中有一个空字符,显示如下:
<HarvPop> </ HarvPop>

因此,为了解决这个问题,我尝试对元素使用nillable ="true"属性,这样它们就可以为null,但仍然显示为空.这似乎是唯一的解决方案,但它根本不起作用.我仍然得到错误.

我目前正在使用XMLMate进行验证,我再次对其进行了多次在线验证.错误仍然存​​在.任何建议都会很棒.

<?xml version="1.0" encoding="UTF-8"?>
Run Code Online (Sandbox Code Playgroud)

<xsd:element name="Reports" type="tns:ReportsType"/>

<xsd:complexType name="ReportsType">
    <xsd:sequence>
        <xsd:element name="Report" type="tns:ReportType" maxOccurs="unbounded" minOccurs="0"/>
    </xsd:sequence>
</xsd:complexType>

<xsd:complexType name="ReportType">
    <xsd:sequence>
        <xsd:element name="Id" nillable="true"/>
        <xsd:element name="Brand" type="xsd:string"/>
        <xsd:element name="Address" type="xsd:string"/>
        <xsd:element name="City" type="xsd:string"/>
        <xsd:element name="State" type="xsd:string"/>
        <xsd:element name="ZipCode" type="xsd:string"/>
        <xsd:element name="Entry" type="tns:EntryType" maxOccurs="unbounded" minOccurs="1"/>
    </xsd:sequence>
</xsd:complexType>

<xsd:complexType name="EntryType">
    <xsd:sequence>
        <xsd:element name="RM" nillable="true" type="xsd:double"/>
        <xsd:element name="Pop" nillable="true" type="xsd:double"/>
        <xsd:element name="Wt" nillable="true" type="xsd:double"/>
        <xsd:element name="EntryId" type="xsd:int"/>
    </xsd:sequence>
</xsd:complexType>
Run Code Online (Sandbox Code Playgroud)

Jon*_*ton 11

类似的节点< HarvPop>< /HarvPop>表示值在那里,并且它的值是一个空字符串.

根据此w3.org页面上的信息:http://www.w3.org/TR/xmlschema-0/#Nils

nillable属性使用如下:

定义: <xsd:element name="shipDate" type="xsd:date" nillable="true"/>

用法: <shipDate xsi:nil="true"></shipDate>

即,您必须明确声明该值为null.

另一种方法是声明minoccurs = 0,以允许值丢失.

  • 或者,将类型从xs:double更改为其itemType为xs:double的列表类型,其中minLength = 0且maxLength = 1.这样,您可以在没有冗余xsi:nil属性的情况下省略该值. (2认同)
  • 否。 nil 表示您可以让节点存在且为空,minOccurs=0 表示可以丢失整个节点。 (2认同)