XML Schema中xs:token与string有何不同?空白字符在XSD中如何处理?
- 内容介绍
- 相关推荐
本文共计1003个文字,预计阅读时间需要5分钟。
这是最常见的错误地方:
实际场景中,比如配置项、用户名、URL 片段这类「语义上不该有冗余空白」的字段,用 xs:token 更安全;而日志文本、代码片段、base64 编码块等需要保留原始空白的,必须用 xs:string。
-
xs:token等价于 W3C 定义的「normalized string + trim」 -
xs:string是最底层类型,不做任何空白处理 - 部分 XML 解析器(如 Java 的 JAXB)在绑定到 Java
String时,对xs:token的处理可能依赖底层 DOM 或 StAX 实现,不一定完全一致
xs:token 对换行符和制表符也敏感
很多人只注意空格,忽略 xs:token 同样会把 \n、\t、\r 当作「空白字符」一并归一化。例如:
<name>Alice<tab><newline>Smith</name>
用 xs:token 声明时,最终值是 "Alice Smith"(<tab> 和 <newline> 被替换成空格);用 xs:string 则原样保留。
本文共计1003个文字,预计阅读时间需要5分钟。
这是最常见的错误地方:
实际场景中,比如配置项、用户名、URL 片段这类「语义上不该有冗余空白」的字段,用 xs:token 更安全;而日志文本、代码片段、base64 编码块等需要保留原始空白的,必须用 xs:string。
-
xs:token等价于 W3C 定义的「normalized string + trim」 -
xs:string是最底层类型,不做任何空白处理 - 部分 XML 解析器(如 Java 的 JAXB)在绑定到 Java
String时,对xs:token的处理可能依赖底层 DOM 或 StAX 实现,不一定完全一致
xs:token 对换行符和制表符也敏感
很多人只注意空格,忽略 xs:token 同样会把 \n、\t、\r 当作「空白字符」一并归一化。例如:
<name>Alice<tab><newline>Smith</name>
用 xs:token 声明时,最终值是 "Alice Smith"(<tab> 和 <newline> 被替换成空格);用 xs:string 则原样保留。

