本文已参与「新人创作礼」活动,一起开启掘金创作之路。
XML中预定义特殊字符及其使用规则
XML的标准解析库会自动地将XML文件中的特殊字符进行转义, 这里是要记录一下这些特殊字符在XML不同概念中的转义规则. 大量的XML问题是在字符串的使用当中由特殊字符引起的.
XML特殊字符
XML中预定义了5种特殊字符:
原始符号 | XML实体转义 | XML数字转义 | 名称 |
---|---|---|---|
< | < | < | 小于号 |
> | > | > | 大于号 |
" | " | " | 双引号 |
& | & | ' | 且 |
' | ' | ' | 单引号 |
特殊字符是否需要转义依赖于它使用的位置.
示例进行验证的官方地址为W3C标记认证服务.
文本
特殊字符在文本中使用时, 最安全的方式是全部都转义. 但是, "
, '
和>
这3个字符在文本中不转义也可以:
<?xml version="1.0"?>
<valid>"'></valid>
属性
特殊字符在属性中使用时, 最安全的方式是全部都转义. 但是, >
这个字符在属性中不转义也可以:
<?xml version="1.0"?>
<valid attribute=">"/>
属性值的引号如果是"
, 那么'
这个字符在属性中不转义也可以:
<?xml version="1.0"?>
<valid attribute="'"/>
反过来也成立, 属性值的引号如果是'
, 那么"
这个字符在属性中不转义也可以:
<?xml version="1.0"?>
<valid attribute='"'/>
注释
全部特殊字符在注释中一定不能转义:
<?xml version="1.0"?>
<valid>
<!-- "'<>& -->
</valid>
CDATA
全部特殊字符在CDATA中一定不能转义:
<?xml version="1.0"?>
<valid>
<![CDATA["'<>&]]>
</valid>
处理指令
全部特殊字符在XML处理指令中一定不能转义:
<?xml version="1.0"?>
<?process <"'&> ?>
<valid/>
XML vs. HTML
HTML有自己的特殊编码集, 覆盖了更多字符.