DTD 中#PCDATA
和#CDATA
之间的区别是什么?
答案 0 :(得分:70)
PCDATA - 解析字符数据
XML解析器通常会解析XML文档中的所有文本。
CDATA - (未分析)字符数据
术语CDATA用于不应由XML解析器解析的文本数据。
像“<”这样的字符和“&”在XML元素中是非法的。
答案 1 :(得分:67)
默认情况下,一切都是PCDATA。在以下示例中,忽略根,<bar>
将被解析,并且它将没有内容,而是一个子节点。
<?xml version="1.0"?>
<foo>
<bar><test>content!</test></bar>
</foo>
当我们想要指定一个元素只包含文本而没有子元素时,我们使用关键字PCDATA,因为该关键字指定该元素必须包含可解析的字符数据 - 即除了字符之外的任何文本 - 比(&lt;),大于(&gt;),&符号(&amp;),引号(')和双引号(“)。
在下一个示例中,<bar>
包含CDATA。它的内容不会被解析,因此<test>content!</test>
。
<?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部分,所有字符都是合法的(包括&lt;,&gt;,&amp;,'和'字符),但“]]&gt;”结束标记除外。
#PCDATA不适合属性的类型。它用于“叶子”文本的类型。
由于历史原因,#PCDATA前缀为哈希。
答案 2 :(得分:11)
From here(Google is your friend):
在DTD中,PCDATA和CDATA用于 断言关于允许的东西 元素和属性的内容, 分别。在元素的内容中 模型,#PCDATA表示该元素 包含(可能包含)“任何旧文本”。 (如下所述的例外情况。)在 一个属性的声明,CDATA是 你可以提出的一种约束 属性的允许值 (其他种类,所有相互排斥, 包括ID,IDREF和NMTOKEN)。一个 允许值为的属性 CDATA可以(像元素中的PCDATA) 包含“任何旧文本。”
可能真正令人困惑的问题 那是另一个“CDATA” 也称为标记部分。一个 标记部分是元素的一部分 (#PCDATA)内容用。分隔 特殊字符串:关闭它。如果你 记住PCDATA是“解析的 字符数据,“CDATA部分是 字面上是一样的,没有 “解析”。解析器传输内容 标记的部分到下游 应用程序没有打扰每一个 他们遇到特殊角色的时间 喜欢&lt;和&amp ;.这很有用 你正在编写一个包含的文档 很多那些特殊的角色(比如 脚本和代码片段);它的 更容易数据输入,更容易 阅读,比相应的实体 参考
所以你可以推断出异常 “任何旧文本”规则就是PCDATA 不能包括任何这些未转义的 特殊人物,除非他们堕落 在CDATA标记范围内 部分。
答案 3 :(得分:9)
PCDATA - 已解析的字符数据。它解析xml文档中的所有数据。
示例:
<family>
<mother>mom</mother>
<father>dad</father>
</family>
这里,family元素还包含2个 元素“母亲”和“父亲”。所以它进一步解析得到母亲和父亲的文本给予家庭的价值“妈妈爸爸”
CDATA - 未分析的已分析数据。这是数据 不应该在xml文档中进一步解析。
<family>
<![CDATA[
<mother>mom</mother>
<father>dad</father>
]]>
</family>
此处,系列的值为<mother>mom</mother><father>dad</father>
。
答案 4 :(得分:3)
PCDATA和CDATA之间的主要区别是
PCDATA - 基本上用于ELEMENTS,而
CDATA - 用于XML的属性,即ATTLIST
答案 5 :(得分:0)
CDATA( C 字符数据):与评论类似,但它是文档的一部分。即CDATA是一个数据,它是文档的一部分,但数据无法用XML解析 注意: XML语句在解析XML时忽略,但CDATA显示为原样。
PCDATA( P arsed C haracter DATA ):默认情况下,所有内容都是PCDATA。 PCDATA是一种数据,可以用XML进行解析。