【问题标题】:What is the Point of using XML CDATA?使用 XML CDATA 有什么意义?
【发布时间】:2014-09-23 10:43:43
【问题描述】:

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

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

我理解它被用作;

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

但是解析器会忽略 CDATA 部分中的文本。

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

This SO question 询问这是什么意思,但同样,从我所看到的它的作用也没有太多细节,也没有我什么时候应该使用它 -这就是我现在问这个问题的原因。

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

【问题讨论】:

  • 我确实看到了,但是您显然没有阅读我的问题的详细信息,因为我说明了它不存在的原因!

标签: xml cdata


【解决方案1】:

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

想象一下你有一个像

这样的元素

<data>...</data>

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

 a < b

像这样:

<data>a < b</data> 

这不起作用,因为 XML 将

你可以转义

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

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

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

(再一次,使用 CDATA,您的文本不能包含 ]]&gt;

另见this question

【讨论】:

  • 好的,所以它真的就像一个“全局转义序列”吗? (比如在字符串中使用 /" 来查看 " 是字符串的一部分?
  • @MrCoder usig \" 宁愿像将
  • 好的,所以它几乎被“忽略”并“作为字符串传递”到 html。这更有意义:) 最初,我只是认为它是一种编写 cmets 或其他东西的方式,甚至完全忽略 - 并不是说​​它像那样传递数据。为帮助/耐心喝彩! :)
【解决方案2】:

&lt;![CDATA[...]]&gt; 是一种在 XML 中引用文本的快速而肮脏的方式。

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

XML 的读者看不到 CDATA 的使用。 &lt;this&gt;&lt;![CDATA[a test]]&gt;&lt;/this&gt; 表示与 &lt;this&gt;a test&lt;/this&gt; 相同的元素。

有一个很大的限制。在 CDATA 中,您只能表示编码中可用的字符(&lt;?xml&gt; 标头中的 encoding="...")。如果您使用 ISO-8859-1 之类的编码,则不能表示 € 或 – 等字符。

因此,如果您手动编写 XML 并且它包含代码,最好将整个代码包含在 CDATA 中以防止出现问题。所以你可以忘记转义对 XML 有意义的字符。

但是用 CDATA 以编程方式引用文本并不是一个好主意,因为它更容易。您最终可能会丢失一些特殊字符,并且有一天您的数据中可能会有序列]]&gt;。最好使用&amp;lt;&amp;gt;&amp;amp;和数字实体代码进行转义。

【讨论】:

    猜你喜欢
    • 2011-02-16
    • 2011-04-04
    • 2014-04-07
    • 1970-01-01
    • 1970-01-01
    • 2015-12-31
    • 1970-01-01
    • 2011-04-26
    相关资源
    最近更新 更多