XML Schema中xs:token与string有何不同?空白字符在XSD中如何处理?

2026-04-29 13:222阅读0评论SEO基础
  • 内容介绍
  • 相关推荐

本文共计1003个文字,预计阅读时间需要5分钟。

XML Schema中xs:token与string有何不同?空白字符在XSD中如何处理?

这是最常见的错误地方:

实际场景中,比如配置项、用户名、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分钟。

XML Schema中xs:token与string有何不同?空白字符在XSD中如何处理?

这是最常见的错误地方:

实际场景中,比如配置项、用户名、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 则原样保留。

阅读全文