使用XML CDATA有什么意义?

时间:2014-09-23 10:43:44

标签: xml cdata

我正在阅读XML文件并遇到了这个<![CDATA[]]>

在什么样的情况下这会有用?

我理解它被用作;

  

解析器将解析XML文档中的所有文本。

     

但解析器将忽略CDATA部分内的文本。

from here.但是,它并没有详细说明何时它可能有用和/或它与xml文件/等的相关性。

This SO question询问它是什么意思,但同样,我没看到它做什么还是应该何时使用它 - 这就是我现在问这个问题的原因。

(我不是一个专业人士,也不是一个娴熟的人 - 好吧,实际上更多的是一个完整的白痴 - 即使阅读docs实际上没有帮助,所以任何全面的答案都会很棒:P)< / p>

2 个答案:

答案 0 :(得分:4)

您可以使用它来避免XML转义特殊字符。

想象一下,你有一个像

这样的元素

<data>...</data>

并希望将以下文本放在数据元素中:

 a < b

像这样:

<data>a < b</data> 

这不起作用,因为XML识别&lt;作为新标签的潜在开端。

你可以逃避&lt;字符:

<data>a &lt; b</data>

或者您可以告诉XML解析器不要将数据放在CDATA部分中来解析数据:

<data><![CDATA[a < b]]></data>

(然后,再次使用CDATA,您的文字不能包含]]>

另见this question

答案 1 :(得分:0)

&lt;![CDATA [...]]&gt;`是一种用XML引用文本的快捷方式。

在XML中,'&lt;','&gt;','&amp;'有特殊的意义。如果你想包含'&lt;'或'&gt;'在XML中,你必须将它们作为'&amp; lt;'来逃避和'&amp; gt;。但是,例如,如果您在XML中包含代码,则可能会使用这些字符,并且不想写例如“c&gt; ='0'&amp;&amp; c&lt; ='9'”作为“c&amp; gt; ='0'&amp; amp;&amp; amp; c&amp; lt; ='9'“。对于这些情况,引入了一种更激进的方式来逃避文本:'&lt;![CDATA ['和']]&gt;'之间的任何内容是逐字解释的。只有序列']]&gt;'标志着逐字文本的结束。

对于XML的读者来说,CDATA的使用是不可见的。 ''代表与'测试'相同的内容。

有一个很大的局限。在CDATA中,您只能表示编码的字符(标题中的encoding =“...”)。如果您使用的是ISO-8859-1等编码,则无法表示€或œ。

等字符

因此,如果您键入包含代码的XML,最好将整个代码包含在CDATA中以防止出现问题。因此,您可以忘记转义对XML有意义的字符。

但是用CDATA编程引用文本并不是一个好主意,因为它更容易。你可能最终失去一些特殊字符,有一天你可能会有序列']]&gt;'在你的数据中。最好逃避使用&amp; lt; &安培; GT; &放大器;放大器;和数字实体代码。