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

Ram*_*nan 23 xml xsd

这是我的示例XML代码:

<bestContact>
<firstName><![CDATA[12345]]></firstName>
<lastName />
</bestContact>
Run Code Online (Sandbox Code Playgroud)

我在用:

<xs:element name="lastName" type="xs:string" minOccurs="1" nillable="false"/>
Run Code Online (Sandbox Code Playgroud)

XSD应该被验证lastName为非空或空.

Kam*_*mal 52

尝试

<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>
Run Code Online (Sandbox Code Playgroud)

  • 好的答案 - "nillable"是多余的想法. (3认同)

小智 16

<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>
Run Code Online (Sandbox Code Playgroud)

  • 我认为你可以用Gab指出的`\ S +`代替这个正则表达式. (2认同)

Nic*_*son 9

@Kamal在这里给了你基本正确的答案.这就是为什么 - nillable似乎总是会引起问题.实际上,你可以考虑nillable为意xsi:nil这个元素的属性.该XML模式规范描述的nillable作为带外信号-它基本上用来表示NULL到数据库.

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


Gab*_*ica 9

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

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

要么

<xs:simpleType name="NonEmptyStringWithoutSpace">
   <xs:restriction base="xs:string">
      <xs:pattern value="\S+"/>
   </xs:restriction>
</xs:simpleType>
Run Code Online (Sandbox Code Playgroud)