XML是什么

Extensible Markup Language,即可扩展标记语言。既然是语言,就有语法要求。很类似HTML(超文本标记语言),用来传输数据。当然XML和XSL结合也可以用来显示数据。XML不像HTML规定了标签的名称,使用XML需要自定义标签。



特殊字符

众所周知,在使用HTML的时候特殊字符是需要转义后才可以正常展示得。例如<用&lt;代替。同时XML作为标记语言也需要转义特殊字符如下表所示:

特殊符号

转义字符

描述

<

&lt;

小于号,标签左尖括号

>

&gt;

大于号,标签右尖括号

&

&amp;

逻辑与

'

&apos;

单引号

"

&quot;

双引号



为什么要处理特殊字符

前面简单介绍了XML以及特殊字符。那么可能有一个疑惑“为什么需要处理XML中的特殊字符”或者“不处理XML中的特殊字符又会怎样”。这时候我们不得不先去了解XML的工作原理,首先看下XML的解析过程如下图:


从以上解析过程中可以看出,直接与XML文档接触的是XML解析器。作为解析器自然要对XML文档的语法进行解析。若有特殊字符,在读取的过程中则会将原有的标签对进行截断,导致语法错误报错。



如何处理特殊字符

根据之前的描述特殊字符在xml文档中处理不当则会导致解析失败。那么如何处理特殊字符,下面根据实际情况给出几种方案:



简单而彻底的方案

直接在xml文档中使用转义字符转义特殊字符便可解决问题,这是最根本也是最简单的处理方式。



在xml中引入properties文件

为什么会把这种方式特别提出来呢?因为我们常常在项目中使用xml文件作为一些工具的配置文件,而配置信息为了安全期间常常设置为带有特殊字符的信息。

这个时候如果直接依然按照方案1直接在xml中使用特殊字符进行处理则会显得繁琐。也许大家在使用Spring的时候都会将数据源的配置信息单独提出来写在一个jdbc.properties文件里,那么为什么这样写呢?

个人认为这块之所以这么写,有下面几点好处:

  • 可以明了的标识配置信息的用途
  • 可以避免dom解析xml时因为特殊字符导致的解析错误发生
  • 在CI环境下配置多个环境,替换文件时可以避免转义字符书写的次数:

例如:使用maven的profile时如果在pom里配置的时候就需要转义特殊字符,那么如果不使用properties文件,则意味着正确的带有特殊字符的信息替换到Spring配置文件中需要两次转义。未免过于繁杂,也易疏忽。