对于Xml,XSD元素不为空或空约束?

时间:2010-12-10 11:02:55

标签: xml xsd

这是我的示例XML代码:

<bestContact>
<firstName><![CDATA[12345]]></firstName>
<lastName />
</bestContact>

我正在使用:

<xs:element name="lastName" type="xs:string" minOccurs="1" nillable="false"/>

XSD应该将lastName验证为非空或空。

4 个答案:

答案 0 :(得分:51)

尝试

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

答案 1 :(得分:9)

@Kamal在这里给了你基本正确的答案。这就是为什么 - nillable似乎总是会导致问题。实际上,您可以将nillable视为允许此元素的xsi:nil属性XML Schema spec将nillable描述为带外信号 - 它基本上用于向数据库指示 NULL

你想要的是一个元素,它必须至少有一个字符长,由@Kamal

给出

答案 2 :(得分:9)

这是恕我直言的一个更好的模式:

<xs:simpleType name="NonEmptyString">
   <xs:restriction base="xs:string">
      <xs:pattern value="^(?!\s*$).+" />
   </xs:restriction>
</xs:simpleType>

<xs:simpleType name="NonEmptyStringWithoutSpace">
   <xs:restriction base="xs:string">
      <xs:pattern value="\S+"/>
   </xs:restriction>
</xs:simpleType>

答案 3 :(得分:0)

这是我最喜欢的解决方案。

<xs:simpleType name="NonEmptyString">
    <xs:restriction base="xs:string">
        <xs:pattern value="[\s\S]*[^ ][\s\S]*"/>
    </xs:restriction>
</xs:simpleType>`