XML CDATA
XML CDATA 区块
Section titled “XML CDATA 区块”默认情况下,XML 文档中的所有文本内容都会被 XML 解析器解析。
然而,包含在 CDATA 区块中的文本被视为原始字符数据,并被解析器忽略。
PCDATA - 已解析字符数据
Section titled “PCDATA - 已解析字符数据”XML 解析器会处理在元素的开始标签和结束标签之间找到的文本内容。此内容称为已解析字符数据(Parsed Character Data,简称 PCDATA)。
例如,在以下片段中,文本 “This text is also parsed” 是 PCDATA:
<message>This text is also parsed</message>解析器需要处理这些数据,因为它可能包含嵌套的 XML 元素,需要进一步分解。考虑以下示例:
<name> <first>Bill</first> <last>Gates</last></name>解析器识别 <first> 和 <last> 是 <name> 中的子元素,并解释文档的结构。
PCDATA 是处理 XML 中文本内容的标准方式,它允许嵌套结构和实体处理。
CDATA - 字符数据(未解析)
Section titled “CDATA - 字符数据(未解析)”CDATA 指的是你希望 XML 解析器完全忽略的文本块。它将内容视为字面字符,而不解释任何可能的标记。
这一点至关重要,因为某些字符在 XML 中具有特殊含义,主要是 <(开始一个标签)和 &(开始一个实体)。在元素内容中直接包含这些字符可能会导致解析错误。
例如,< 会让解析器认为一个新的元素开始了。
& 会让解析器期望一个有效的实体引用(如 & 或 <)。
包含代码片段(如 JavaScript 或 XML 示例)的文本通常包含这些字符。为了防止错误,此类内容可以用 CDATA 区块包裹起来。
CDATA 区块以 <![CDATA[ 开始,以 ]]> 结束。介于两者之间的所有内容都会不经解析直接通过。
<script type="application/javascript"><![CDATA[ function compareValues(a, b) { if (a < b && a < 0) { // 这里的 '<' 和 '&' 字符是安全的 return 1; } else { return 0; } }]]></script>在上面的示例中,CDATA 区块内的 JavaScript 代码被 XML 解析器忽略,从而防止了由 < 和 && 运算符引起的错误。
关于 CDATA 区块的重要注意事项:
- CDATA 区块不能包含字面字符串
]]>。如果你需要包含此序列,则必须分割 CDATA 区块。 - 不允许嵌套 CDATA 区块。
- 结束标记
]]>中不应有空格或换行符。
虽然 CDATA 很有用,但过度使用有时可能表明 XML 不是数据处理的最佳格式(例如,嵌入大型、复杂的非 XML 块)。如果这种情况经常发生,请考虑替代方案。