Xml架构模式不允许在字符串的开头、内部或结尾出现空白



我的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无法处理此问题。

我认为正则表达式模式正是您想要的。类似于:

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

注意,除非xs:whiteSpace = preserve,否则值之前/之后的空格实际上可能不是值的一部分。请考虑阅读XSD规范"验证期间空白规范化"和内置数据类型的以下部分:字符串。

最新更新