不允许空字符串的XML模式限制模式

时间:2011-05-16 07:53:15

标签: regex xsd

在我的XML模式中,我有类型字符串的元素,我不想为空(如果它包含空格等,我也认为它是空的)

我申请了我在http://blogs.msdn.com/b/neerajag/archive/2005/08/12/450723.aspx

找到的重新启动
<xsd:restriction base = "xsd:string">
  <xs:minLength value="1" />
  <xs:pattern value=".*[^\s].*" />
</xsd:restriction>

这种模式究竟做了什么,将会做我期望的事情?

4 个答案:

答案 0 :(得分:8)

这不是你想要的吗?

 <xs:restriction base="xs:token">
  <xs:minLength value="1"/>
 </xs:restriction>

如果字符串只包含空格(换行符,回车符,制表符,前导和尾随空格),则处理器将删除它们,因此验证将失败;如果还有其他什么,验证将成功。 (注意:两个或多个空格的内部序列将被删除 - 确保你没关系)

答案 1 :(得分:6)

模式:

  • 零个或多个字符.*.匹配任何字符)。
  • 匹配列出的字符集中的内容。 \s是空格,因此[^\s]是“匹配不是空格的内容。匹配中的初始^会否定正常匹配这些字符中的任何一个。
  • 零个或多个字符。

答案 2 :(得分:5)

我不知道是否仍然有用,但我找到了比第一次发布更好的模式。这是:

<xs:simpleType name="nonEmptyString">
    <xs:restriction base="xs:string">
        <xs:pattern value="(\s*[^\s]\s*)+"></xs:pattern>
    </xs:restriction>
</xs:simpleType>

使用Eclipse,似乎工作正常。

答案 3 :(得分:0)

查看帖子“不允许空字符串的模式”的主题仍然没有答案。您可以使用<xsd:whiteSpace value="collapse" />标记来禁止空格

whiteSpace约束设置为"collapse",它将执行以下操作

  1. 删除所有空格字符,包括换行符,制表符, 空格,回车
  2. 删除了前导和尾随空格
  3. 多个空格缩小为单个空格
  4. 参考:W3C whiteSpace