這是我的示例XML代碼:對於Xml,XSD元素不爲空或空約束?
<bestContact>
<firstName><![CDATA[12345]]></firstName>
<lastName />
</bestContact>
我使用:
<xs:element name="lastName" type="xs:string" minOccurs="1" nillable="false"/>
的XSD應驗證lastName
不爲空。
這是我的示例XML代碼:對於Xml,XSD元素不爲空或空約束?
<bestContact>
<firstName><![CDATA[12345]]></firstName>
<lastName />
</bestContact>
我使用:
<xs:element name="lastName" type="xs:string" minOccurs="1" nillable="false"/>
的XSD應驗證lastName
不爲空。
嘗試
<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>
@Kamal在這裏給你基本上是正確的答案。這就是爲什麼 - nillable
總是會導致問題。實際上,您可以考慮nillable
,意思是允許此元素上的xsi:nil
屬性。 XML Schema spec描述了帶外信號 - 它基本上用於向數據庫指示NULL。
你想要的是通過@Kamal
<xsd:element name="lastName" type="NonEmptyString" nillable="false"/>
<xsd:simpleType name="NonEmptyString">
<xsd:restriction base="xs:string">
<xsd:minLength value="1" />
<xsd:pattern value=".*[^\s].*" />
</xsd:restriction>
</xsd:simpleType>
給出了必須至少有一個字符長的一個元素這是恕我直言一個更好的模式:
<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>
這是我最喜歡的解決方案。
<xs:simpleType name="NonEmptyString">
<xs:restriction base="xs:string">
<xs:pattern value="[\s\S]*[^ ][\s\S]*"/>
</xs:restriction>
</xs:simpleType>`
很好的答案 - 'nillable'是多餘的想法。 – 2010-12-10 12:23:11
@Nic - 同意。我只是從問題中複製並粘貼了這一行:) – Kamal 2010-12-10 12:32:49
使用這個我得到「Element'lastName'同時具有'type'屬性和'匿名類型'子元素,只有其中一個元素被允許。我認爲在容器元素中使用type =「xs:string」存在問題。 – 2016-06-23 03:19:20