XML怎么处理换行和空格 xml:space属性用法

17次阅读

xml中换行和空格默认保留,但是否视为有意义空白取决于解析器及xml:space属性;该属性取值default(按默认规则处理)或preserve(强制保留所有空白),具继承性,仅作用于字符数据中的空白。

XML怎么处理换行和空格 xml:space属性用法

XML 中的换行和空格默认是**保留的**,但具体是否被应用程序当作有意义的空白(比如排版、缩进)来处理,取决于解析器行为和 xml:space 属性的设置。

xml:space 属性的作用

xml:space 是一个标准 XML 属性,用于显式告诉 XML 处理器:当前元素及其子元素中的空白字符(空格、制表符、换行)是否应被“保留”或“忽略”。它只有两个合法值:

  • default:按处理器默认规则处理空白(多数解析器会**保留所有空白**,但某些应用层逻辑可能后续过滤)
  • preserve:强制保留所有空白字符,包括换行、缩进、多个连续空格

什么时候需要显式设置 xml:space=”preserve”

当你的 XML 内容本身依赖格式(比如诗歌、代码片段、预格式化文本),而下游程序(如 XSLT 转换、浏览器渲染、富文本编辑器导入)可能默认压缩或丢弃换行时,就需要用它。

例如:

  春风又绿江南岸,
  明月何时照我还?

这样,XSLT 或 css white-space: pre 渲染时就能正确显示缩进和换行。

xml:space 的作用范围和继承性

xml:space 具有**继承性**:在一个元素上设为 preserve,它的所有子元素也默认继承该行为,除非子元素显式覆盖为 default

注意:xml:space 只影响**字符数据(#PCDATA)中的空白**,不影响元素标签之间的空白(即“标记外空白”),后者通常由解析器决定是否保留在 dom 树中(如 pythonxml.etree.ElementTree 默认会丢弃)。

实际开发中的常见处理建议

  • 不要依赖缩进来表达结构——XML 结构靠嵌套元素,不是空格
  • 如果内容含多行文本(如 ),且需保留换行,加 xml:space="preserve"
  • 用 XSLT 处理时, 可全局去除指定元素的空白,与 xml:space 配合使用更灵活
  • jsON 转 XML 或生成 XML 的代码中(如 java JAXB、Python lxml),检查是否自动添加了换行缩进——这些属于序列化格式控制,和 xml:space 无关
text=ZqhQzanResources