XML是什么
XML指的是Extensible Markup Language,即可扩展
标记语言。既然是语言,就有语法要求。很类似HTML(超文本
标记语言),用来传输数据。当然XML和XSL结合也可以用来
显示数据。XML不像HTML规定了
标签的
名称,使用XML需要
自定义标签。
特殊字符
众所周知,在使用HTML的时候特殊字符是需要转义后才可以正常展示得。例如<用<代替。同时XML作为
标记语言也需要转义特殊字符如下表所示:
特殊符号 |
转义字符 |
描述 |
< |
< |
小于号,标签左尖括号 |
> |
> |
大于号,标签右尖括号 |
& |
& |
逻辑与 |
' |
' |
单引号 |
" |
" |
双引号 |
使用转义字符的目的便是为了正确的
输出特殊字符。
为什么要处理特殊字符
前面简单介绍了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
配置文件中需要两次转义。未免过于繁杂,也易疏忽。