Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/xml/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Xml的XSD元素不是Null或空约束?_Xml_Xsd - Fatal编程技术网

Xml的XSD元素不是Null或空约束?

Xml的XSD元素不是Null或空约束?,xml,xsd,Xml,Xsd,这是我的示例XML代码: <bestContact> <firstName><![CDATA[12345]]></firstName> <lastName /> </bestContact> 我正在使用: <xs:element name="lastName" type="xs:string" minOccurs="1" nillable="false"/> XSD应该验证lastName为非空。试试

这是我的示例XML代码:

<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
似乎总是会引起问题的原因。实际上,您可以考虑<代码> nILabel作为含义<强>允许此元素< <代码> xsi:nIL/COD>属性> <强>。将nillable描述为带外信号-它基本上用于向数据库指示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>


这是我最喜欢的解决方案



@Nic-同意。我刚刚复制并粘贴了问题中的行:)使用该行,我得到“元素'lastName'既有'type'属性,又有'anonymous type'子元素。元素只允许使用其中一个属性。”我认为在容器元素中使用type=“xs:string”有问题。与第二个建议相比,您的第一个建议有什么优势吗(非空)第一个允许使用Black字符串,但第二个不允许。这取决于您的需要。我可以有一个可选的,图案,si吗因为它是可选的,有一个类型,它不能为null!!!!有一个类型模式可能为null吗?(?将导致一个无效的xsd,因此第一个解决方案的效果不会比Gab提供的第二个更好,这一个对我很有效。因为我正在寻找一个刚刚去掉前导空格的表达式,而不是文本之间的空格,我想你可以用Gab指出的
\S+
替换这个正则表达式。
<xs:simpleType name="NonEmptyStringWithoutSpace">
   <xs:restriction base="xs:string">
      <xs:pattern value="\S+"/>
   </xs:restriction>
</xs:simpleType>