xml中的空格之完全解说
XML中空格由空格符、回车符、换行符和制表符组成,其处理依赖xml:space属性及xsl:strip-space和xsl:preserve-space指令。空格节点是否重要取决于元素内容类型(纯元素或混合内容)。XML解析器会规范化行尾和属性值,XSLT处理器仅保留特定条件下的文本节点。
在XML和XSLT的世界里,空格的处理可不像在HTML中那么简单。HTML对空格基本上是无视的,但XML的默认立场却是:所有空格都必须被保留。这背后的逻辑,其实关乎数据结构的严谨性。
根据XML规范,所谓的“空格”是四种字符的任意组合:空格符(#x20)、回车符(#xD)、换行符(#xA)和制表符(#x9)。这些字符在XML文件中会形成所谓的“空格结点”,它们属于文本结点的一种。
对于XML和XSLT来说,空格涉及两个核心议题:
- 在XML输入文件中,哪些空格是重要的,需要被XSLT处理器看见?关键就在于
xml:space属性。 - 在XSLT模板文件中,哪些空格是重要的,需要被复制到结果树中?这就要看
xsl:strip-space和xsl:preserve-space这两个指令了。
重要和不重要的空格结点
一个空格结点是否重要,取决于它所在的上下文。如果某个元素的内容只能包含子元素(即纯元素内容),那么该元素内的空格结点就是“不重要的”。反之,如果元素的内容是混合类型(#PCDATA),那么其中的空格结点就被视为“重要的”。至于那些既包含文本又包含子元素的混合内容,情况就比较复杂了,需要根据具体语义来判断。
XML处理器的规范化处理
XSLT处理器在接触XML输入文件之前,会先由XML解析器进行预处理。这个过程有几个关键点:
xml:space属性可以改变后续应用程序(如XSLT处理器)处理空格结点的模式。- XML文件中任何一行的结尾符号都会被统一替换成单一的新行字符(#xA)。这是因为不同操作系统(如Windows和Unix)对行尾符的定义不同,规范化可以消除这种差异。
- 属性值在被交给XML应用程序之前,也需要进行规范化操作。具体步骤包括:每一行结尾符号统一成#xA;所有空格符(#x20、#xD、#xA、#x9)都替换成#x20;属性值中的字符引用(如
)会被替换成对应的字符;实体引用则用其替换文本替代。最后,如果属性类型不是CDATA,解析器还会进一步删除属性值前后的空格,并将中间的空格序列替换成单一空格。
XSLT处理器的空格保留策略
当XSLT处理器将XML输入文件和XSLT模板文件都构建成结构树后,会先合并相邻的文本结点,然后抽掉一些多余的文本结点。不过,以下三种情况的文本结点会被保留:
- 该文本结点的父元素属于“空格保留元素名称集”。
- 该文本结点中至少包含一个非空格字符。
- 该文本结点的某个祖先元素设置了
xml:space="preserve",且没有更近的祖先元素设置xml:space="default"。
对于XSLT模板文件来说,所谓的“空格保留元素名称集”只有一个元素:xsl:text。模板文件中其他位置的空格结点都会被删除,但出现在xsl:text元素内的空格则会原封不动地保留下来。
WPS Office是一款面向macOS用户的综合办公套件,将文字处理、电子表格、演示文稿、PDF工具、模板与云协作整合在同一应用中。它兼容常见Microsoft Office格式,支持Intel及Apple芯片Mac,基础功能可免费使用,
Shapr3D是一款面向工业设计、机械工程、建筑概念和三维打印工作流的CAD软件。Mac版采用Parasolid建模内核,支持草图约束、实体建模、工程图、可视化渲染及常见CAD格式交换,并可通过账户在多台设备之间同步项目。
REAPER是Cockos开发的数字音频工作站,提供多轨音频与MIDI录制、剪辑、处理、混音和母带制作工具。Mac版兼容Intel与Apple芯片,支持AU、VST、VST3、CLAP等插件格式,并提供高度可定制的工作流程。
Affinity Designer 是面向矢量图形、数字插画和界面设计的专业创作工具,可在矢量、像素与导出工作区之间快速切换。它提供曲线编辑、形状构建、画板、排版、图层和专业色彩管理,并支持常见设计文件的导入及多种印刷、网页格式输出。
Capture One Pro 是面向摄影师和影像团队的专业桌面照片处理工具,提供相机定制色彩配置、RAW转换、图层与蒙版、联机拍摄、目录及会话管理等功能。它适合棚拍、人像、商业产品、婚礼和风光摄影,
Adobe Acrobat Pro 是面向专业 PDF 工作的综合解决方案,可在 Windows 中创建、编辑、转换、比较、整理和保护文档,并支持表单、电子签名、扫描件文字识别及敏感信息永久遮盖。订阅还包含网页、移动服务和云端协作能力,













