我的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文档。我正在编写一个使用XmlSerializer对Xml文档进行序列化/反序列化的C#程序。

之所以提出这一点,是因为我已经阅读了许多其他有关Xml模式和空白并使用xs:whiteSpace =保留,折叠,替换的文章。我认为XmlSerializer不会处理此问题。

最佳答案

我认为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的以下部分。

07-24 09:49
查看更多