验证XML元素是否为强制值

时间:2014-06-05 08:03:57

标签: asp.net xml validation xsd

我想为 XML 创建 XSD 。我有使用xs:string数据类型声明的XML元素,其中数据是必需的。我创建了一个XSD并设置了minOccurs="1",但后来发现它的目的是检查元素是否出现在XML中。我还发现有一个关键字use="required",但它是属性的,不能在XML元素中使用。我终于尝试了nillable="false"但是我的元素中没有任何数据验证了XSD。

这是我的文件:

<HelloWorld>
  <Name></Name>
  <Gender></Gender>
</HelloWorld>

和XSD:

<xs:schema attributeFormDefault="unqualified" elementFormDefault="qualified" xmlns:xs="http://www.w3.org/2001/XMLSchema">
  <xs:element name="HelloWorld">
    <xs:complexType>
      <xs:sequence>
        <xs:element type="xs:string" name="Name" minOccurs="1"/>
        <xs:element type="xs:int" name="Gender"/>
      </xs:sequence>
    </xs:complexType>
  </xs:element>
</xs:schema>

这里我希望Name元素中的数据始终存在(它是必填字段)。当我验证此文件时,它将为Gender抛出一个错误,说它包含一个无效的整数。如果您输入一些数字,它将开始成功验证,但它不会检查Name元素内的数据。

1 个答案:

答案 0 :(得分:1)

验证是因为空字符串 是有效的xs:string。空Gender失败,因为空字符串不是有效xs:int

如果要强制Name验证在空时失败,则必须添加限制。你选择你需要什么样的限制:最小字符串长度,某些字符串字符(枚举或模式)等。在下面的例子中,我添加了一个限制,要求字符串至少有一个字符长:

<xs:element name="Name" minOccurs="1">
    <xs:simpleType>
        <xs:restriction base="xs:string">
            <xs:minLength value="1"/>
        </xs:restriction>
    </xs:simpleType>
</xs:element>

如果Name为空,它将失败。