Xml架构模式在字符串的开头,里面或结尾处不允许空格

时间:2013-07-20 22:58:53

标签: c# xml xsd whitespace xmlserializer

我的xml架构中有一些字符串类型的元素。但是,我需要限制字符串,以禁止字符串开头,结尾或“内部”的任何空格,并且长度至少为1。

以下是一些值,后面是我希望验证产生的结果:

"HELLO" (Valid)
"H" (Valid)
"" (Not Valid) [length = 0]
" HELLO" (Not Valid) [starts with space]
"HELLO " (Not Valid) [ends with space]
"HEL LO" (Not Valid) [contains a space]

我知道如何创建一个限制字符串的简单类型,我知道如何要求长度至少为1:

<xs:simpleType name="MyString">
    <xs:restriction base="xs:string">
        <xs:minLength value="1"/>
    </xs:restriction>
</xs:simpleType>

现在我只需要一个模式添加到我需要的简单类型中。

有人可以告诉我使用什么模式吗?

谢谢。

注意 - 我没有使用像Xml Spy这样的程序来验证我的Xml文档。我正在编写一个C#程序,它使用XmlSerializer序列化/反序列化Xml文档。

我提出这个问题的原因是因为我已经阅读了有关Xml架构和空格以及使用xs的各种其他帖子:whiteSpace = preserve,collapse,replace。我不认为XmlSerializer会处理这个问题。

1 个答案:

答案 0 :(得分:1)

我认为regular expression pattern正是您所寻找的。类似的东西:

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

请注意,除非xs:whiteSpace = preserve,否则值之前/之后的空格可能实际上不是值的一部分。请考虑阅读XSD规范White Space Normalization during ValidationBuilt in data types:string的以下部分。