2

我的 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 = preserve、collapse、replace 的各种其他帖子。我不认为 XmlSerializer 可以处理这个问题。

4

1 回答 1

1

我认为正则表达式模式是您正在寻找的。就像是:

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

于 2013-07-20T23:58:41.773 回答