我们应该何时将XML中的< > & " '
替换为<
等字符
我的理解是,只是为了确保如果XML的内容部分有> <
,则解析器不会处理标记的开头或结尾。
另外,如果我有一个XML:
<hello>mor>ning<hello>
应该替换为:
<hello>mor>ning<hello>
<hello>mor>ning<hello>
<hello>mor>ning<hello>
我不明白为什么需要更换。什么时候需要它,究竟应该更换什么(标签或文字)?
答案 0 :(得分:9)
XML Specification的第2.4节明确指出:
&符号(&amp;)和左尖括号(&lt;)不得 以字面形式出现,除非用作标记分隔符, 或在评论,处理指令或CDATA部分内。如果 它们在别处需要,必须使用数字进行转义 字符引用或字符串“&amp; amp;”和“&amp; lt;” 分别。可以使用以下来表示右尖括号(&gt;) 字符串“&amp; gt;”,并且为了兼容性,必须使用其中任何一个进行转义 “&amp; gt;”或出现在字符串“]]&gt;中的字符引用 “在内容中,当该字符串未标记CDATA的结尾时 部分。
答案 1 :(得分:8)
<
,>
,&
,"
和'
在XML中都有特殊含义(例如“实体的开头”或“属性值”分隔符“)。
为了让这些字符显示为数据(而不是它们的特殊含义),它们可以由实体代表(<
代表<
等等。)
有时这些特殊含义是上下文敏感的(例如“并不意味着”属性定界符“在标记之外),并且有些地方可以将它们作为数据显示为原始。而不是担心这些异常,它最简单如果你想避免它们的特殊含义,它们总是将它们表示为实体。然后唯一的问题是显式CDATA部分,其中特殊含义不成立(并且&
不会启动实体)。
应该替换为
不应将其表示为任何一种。实体必须以分号结尾。
如何表示它取决于您的数据示例位和标记位。例如,您没有说过,<hello>
应该是数据还是hello元素的开始标记。
答案 2 :(得分:5)
您必须对所有在XML中具有特殊含义的字符进行编码,但不应由解析器解释。
假设您的XML
<hello>mor>ning</hello>
你会把它编码为
<hello>mor>ning</hello>
或使用CDATA
[Wikipedia]部分:
<hello><![CDATA[mor>ning]]></hello>
答案 3 :(得分:1)
您可以看到此解释enter link description here 但基本上,像&lt;和&gt;在解析xml文档时很重要。如果xml节点文本或属性文本中包含额外的这些特殊字符,则解析器将无法正确理解该文档。如果要将xml发送到某个Web服务,则应正确转义所有特殊字符。
答案 4 :(得分:1)
https://github.com/savonrb/gyoku/blob/master/README.md
你可以使用Gyoku来逃避CDATA中的角色。