xsd不能使用可空值

时间:2014-10-14 12:45:20

标签: c# xml xsd

我在使用C#win应用程序中的xsd验证我的XML文件时遇到问题。

我已使用nillable="true"自定义了我的元素xsd,但无效并给了我错误:

  

元素'FLG_SUPERVISOR'无效。值''无效   数据类型“http://www.w3.org/2001/XMLSchema:decimal” - 字符串   \“\”不是有效的十进制值

我的xsd是这样的:

 <?xml version="1.0" encoding="Windows-1252"?>
 <xs:schema attributeFormDefault="unqualified" elementFormDefault="qualified" 

 xmlns:xs="http://www.w3.org/2001/XMLSchema">
 <xs:element name="DocumentElement">
  <xs:complexType>
   <xs:sequence>
    <xs:element maxOccurs="unbounded" name="UserSettings" >
   <xs:complexType>
  <xs:sequence>
 <xs:element name="ID_UTENTE" minOccurs="1" maxOccurs="1" type="xs:decimal" />
 <xs:element name="ID_GRUPPO" minOccurs="1" maxOccurs="1" type="xs:decimal" />
 <xs:element name="NOME_UTENTE" minOccurs="1" maxOccurs="1" type="xs:string" />
 <xs:element name="PASSWORD_UTENTE" minOccurs="1" maxOccurs="1" type="xs:string" />
 <xs:element name="FLG_ABILITATO" nillable="true" minOccurs="1" maxOccurs="1" />
 <xs:element name="DES_UTENTE" type="xs:string" />
 <xs:element name="ACRONIMO" type="xs:string" />
 <xs:element name="FLG_SUPERVISOR" nillable="true" minOccurs="0" maxOccurs="1"
 type="xs:decimal" />

我已设置nillable="true",但如果xml中的FLG_SUPERVISORE值为空(null),则会出现此错误: 如何更改我的xsd以启用空/空值? (nillable ="true"在其他元素情况下不起作用。)

非常感谢

1 个答案:

答案 0 :(得分:0)

首先,正确的属性名称是“nillable”。

其次,将元素指定为nillable允许您拥有一个空实例,前提是该实例包含属性xsi:nil =“true”。我怀疑你的元素实例中缺少这个属性。

就个人而言,我从不使用xsi:nil。如果要允许元素包含小数或不包含任何内容,有两种方法可以执行此操作:

(a)将类型定义为具有两个成员的联合类型,一个是xs:decimal,另一个是固定值为“”的字符串(空字符串)

(b)将类型定义为列表类型,项目类型为xs:decimal,minLength = 0,maxLength = 1。