看来 PCDATA 和 CDATA 的松散定义是

  1. PCDATA是字符数据,但是 待解析。
  2. CDATA 是字符数据,并且 不是 待解析。

但后来有人告诉我 CDATA 实际上已解析或 PCDATA 实际上未解析......所以有点混乱。有谁知道真正的交易是什么?

更新:我实际上在维基百科上添加了 PCDATA 定义......所以不要太认真地对待这个答案,因为这只是我对它的粗略理解。

有帮助吗?

解决方案

来自维基:

电脑数据

简单来说,PCDATA 代表解析字符数据。这意味着字符将由 XML、XHTML 或 HTML 解析器进行解析。(&lt; 将更改为 <, <p> 将被视为段落标签等)。与 CDATA 相比,其中字符不由 XML、XHTML 或 HTML 解析器解析。

数据中心

术语 CDATA 表示字符数据,在标记语言 SGML 和 XML 中用于不同但相关的目的。该术语表示文档的某个部分是通用字符数据,而不是非字符数据或具有更具体、有限结构的字符数据。

其他提示

PCDATA 和 CDATA 都被解析。他们都 特点 数据。

它们都必须只包含有效字符。例如,如果您的文档编码是 UTF-8,则 CDATA 部分的内容仍然必须是有效的 UTF-8 字符。因此,随机的二进制数据可能会妨碍文档的格式良好。此外,如果只是为了找到结束部分标记,CDATA 部分仍然会被解析。但其他类似标记的字符,如 <、> 和 & 会被解析器忽略并按原样传递。

PCDATA 中的 OTOH 文字 < 和 &(以及属性值中的 ' 或 ")必须进行转义,否则它们将被解释为标记。实体也将扩大。

所以是的,CDATA 部分确实被解析了。我不知道为什么你被告知 PCDATA 没有被解析。

PCDATA - 解析的字符数据

CDATA - (未解析的)字符数据

http://www.w3schools.com/XML/xml_cdata.asp

  • PCDATA 是将由解析器解析的文本。文本中的标签 将被视为标记,实体将被展开。
  • CDATA 是文本 不是 由解析器解析。文本内的标签将不是 被视为标记,并且实体不会被扩展。

默认情况下,一切都是 PCDATA。在下面的示例中,将忽略根,将被解析,并且它将没有内容,只有一个子项。

<?xml version="1.0"?>
<foo>
<bar><test>content!</test></bar>
</foo>

当我们想要指定一个元素仅包含文本而不包含子元素时,我们使用关键字 PCDATA,因为该关键字指定该元素必须包含可解析的字符数据 - 即,除小于 (< ) 、大于号 (>) 、与号 (&)、引号 (') 和双引号 (")。

在下一个示例中,bar 是 CDATA,未进行解析,并且内容为“content!”。

<?xml version="1.0"?>
<foo>
<bar><![CDATA[<test>content!</test>]]></bar>
</foo>

SGML 中有多种内容模型。#PCDATA 内容模型表示元素可以包含纯文本。它的“已解析”部分意味着其中的标记(包括 PI、注释和 SGML 指令)将被解析,而不是显示为原始文本。这也意味着实体引用被替换。

另一种允许纯文本内容的内容模型是 CDATA。在 XML 中,元素内容模型可能不会隐式设置为 CDATA,但在 SGML 中,这意味着元素内容中的标记和实体引用被忽略。然而,在 CDATA 类型的属性中,实体引用被替换。

在 XML 中,#PCDATA 是唯一的纯文本内容模型。如果您确实想允许元素中包含文本内容,则可以使用它。CDATA 内容模型可以通过 #PCDATA 中的 CDATA 块标记显式使用,但元素内容可能不会默认定义为 CDATA。

在 DTD 中,包含文本的属性类型必须是 CDATA。属性声明中的 CDATA 关键字与 XML 文档中的 CDATA 部分具有不同的含义。在 CDATA 部分中,除了“]]>”结束标记之外,所有字符都是合法的(包括 <、>、&、’ 和“ 字符)。

#PCDATA 不适合属性的类型。它用于“叶子”文本类型。

#PCDATA 前面加上一个哈希(也称为“标签”或 octothorp)只是出于历史原因。

你的第一个定义是正确的。

PCDATA 被解析,这意味着实体被扩展并且文本被视为标记。CDATA 不由 XML 解析器解析。

如果 XHTML DTD 中仅将元素默认设置为 CDATA,则可以节省大量丑陋的手动覆盖...为什么脚本块会包含其他元素?如果存在这样的元素,它们将由 JS 解释器在 DOM 操作操作中处理——在这种情况下,在文档插入和渲染之前,XML 解析器仍应完全忽略它们。我想它可能是为了强制使用外部脚本资源文件而设计的,这最终是一件好事。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top