在XML文档中必须转义哪些字符,或者在哪里可以找到这样的列表?
当前回答
如果您使用适当的类或库,它们将为您进行转义。许多XML问题都是由字符串连接引起的。
XML转义字符
只有五种:
" "
' '
< <
> >
& &
转义字符取决于使用特殊字符的位置。
这些示例可以在W3C标记验证服务(W3C Markup Validation Service)中验证。
Text
安全的方法是转义文本中的所有五个字符。但是,",'和>这三个字符在文本中不需要转义:
<?xml version="1.0"?>
<valid>"'></valid>
属性
安全的方法是转义属性中的所有五个字符。但是,>字符不需要在属性中转义:
<?xml version="1.0"?>
<valid attribute=">"/>
'字符在属性中不需要转义,如果引号是":
<?xml version="1.0"?>
<valid attribute="'"/>
同样,如果引号是',属性中的"不需要转义:
<?xml version="1.0"?>
<valid attribute='"'/>
评论
注释中不能转义所有5个特殊字符:
<?xml version="1.0"?>
<valid>
<!-- "'<>& -->
</valid>
名为CDATA
所有5个特殊字符都不能在CDATA节中转义:
<?xml version="1.0"?>
<valid>
<![CDATA["'<>&]]>
</valid>
处理指令
在XML处理指令中,所有5个特殊字符都不能转义:
<?xml version="1.0"?>
<?process <"'&> ?>
<valid/>
XML vs. HTML
HTML有自己的一组转义码,可以覆盖更多的字符。
其他回答
根据万维网联盟(w3C)的规范,有5个字符不能以文字形式出现在XML文档中,除非用作标记分隔符或在注释、处理指令或CDATA部分中使用。在所有其他情况下,这些字符必须使用对应的实体或根据下表的数字引用替换:
Original CharacterXML entity replacementXML numeric replacement < < < > > > " " " & & & ' ' '
注意,前面提到的实体也可以在HTML中使用,除了',它是在XHTML 1.0中引入的,在HTML 4中没有声明。因此,为了确保向后兼容性,XHTML规范建议使用'代替。
如果您使用适当的类或库,它们将为您进行转义。许多XML问题都是由字符串连接引起的。
XML转义字符
只有五种:
" "
' '
< <
> >
& &
转义字符取决于使用特殊字符的位置。
这些示例可以在W3C标记验证服务(W3C Markup Validation Service)中验证。
Text
安全的方法是转义文本中的所有五个字符。但是,",'和>这三个字符在文本中不需要转义:
<?xml version="1.0"?>
<valid>"'></valid>
属性
安全的方法是转义属性中的所有五个字符。但是,>字符不需要在属性中转义:
<?xml version="1.0"?>
<valid attribute=">"/>
'字符在属性中不需要转义,如果引号是":
<?xml version="1.0"?>
<valid attribute="'"/>
同样,如果引号是',属性中的"不需要转义:
<?xml version="1.0"?>
<valid attribute='"'/>
评论
注释中不能转义所有5个特殊字符:
<?xml version="1.0"?>
<valid>
<!-- "'<>& -->
</valid>
名为CDATA
所有5个特殊字符都不能在CDATA节中转义:
<?xml version="1.0"?>
<valid>
<![CDATA["'<>&]]>
</valid>
处理指令
在XML处理指令中,所有5个特殊字符都不能转义:
<?xml version="1.0"?>
<?process <"'&> ?>
<valid/>
XML vs. HTML
HTML有自己的一组转义码,可以覆盖更多的字符。
对一个老问题的新的、简化的回答……
简化XML转义(有优先级,100%完成)
Always (90% important to remember) Escape < as < unless < is starting a <tag/> or other markup. Escape & as & unless & is starting an &entity;. Attribute Values (9% important to remember) attr=" 'Single quotes' are ok within double quotes." attr=' "Double quotes" are ok within single quotes.' Escape " as " and ' as ' otherwise. Comments, CDATA, and Processing Instructions (0.9% important to remember) <!-- Within comments --> nothing has to be escaped but no -- strings are allowed. <![CDATA[ Within CDATA ]]> nothing has to be escaped, but no ]]> strings are allowed. <?PITarget Within PIs ?> nothing has to be escaped, but no ?> strings are allowed. Esoterica (0.1% important to remember) Escape control codes in XML 1.1 via Base64 or Numeric Character References. Escape ]]> as ]]> unless ]]> is ending a CDATA section. (This rule applies to character data in general – even outside a CDATA section.)
如果要处理字符数据而不是标记,则只有<和&需要转义:
2.4字符数据和标记
公认的答案不正确。最好是使用一个库来转义xml。
正如在另一个问题中提到的
基本上,控制字符和超出Unicode范围的字符是不允许的。这也意味着,例如,调用字符实体是禁止的。”
如果你只转义这五个字符。您可能会遇到这样的问题:发现了一个无效的XML字符(Unicode: 0xc)
推荐文章
- 格式化XML字符串以打印友好的XML字符串
- malformedurlexception:没有协议
- 选择包含“foo”的属性的正确XPath是什么?
- 字符串资源新行/n不可能?
- Android: ScrollView vs NestedScrollView
- 如何把空格字符放入XML字符串名?
- 比较Java中2个XML文档的最佳方法
- 将XML字符串转换为对象
- 使用Python将XML转换为JSON ?
- String类中的什么方法只返回前N个字符?
- 我可以将c#字符串值转换为转义字符串文字吗?
- 我如何转义一个单引号?
- c# XML文档网站链接
- 如何从shell执行XPath一行程序?
- 没有为文档检测到语法约束(DTD或XML模式)