PCDATA
PCDATA 的意思是被解析的字符数据(parsed character data)。可把字符数据想象为 XML 元素的开始标签与结束标签之间的文本。PCDATA 是会被解析器解析的文本。这些文本将被解析器检查实体以及标记。文本中的标签会被当作标记来处理,而实体会被展开。不过,被解析的字符数据不应当包含任何 & < > 字符;需要使用 &amp; &lt; &gt; 实体来分别替换它们。

CDATA
CDATA 的意思是字符数据(character data)。CDATA 是不会被解析器解析的文本。在这些文本中的标签不会被当作标记来对待,其中的实体也不会被展开。
几个实体引用字符:
&lt; <
&gt; >
&amp; &
&quot; "
&apos; '

又有网上有人这样说,我觉得挺直观,先转过来:
PCDATA表示已解析的字符数据。
CDATA是不通过解析器进行解析的文本,文本中的标签不被看作标记。CDATA表示里面是什么数据XML不会解析,比如

  1. <![CDATA[
  2. if(a>b){
  3. System.out.println(a);
  4. }
  5. ]]>

注意上面的a与b之间的 > 符号.

PCDATA的数据是要给xml解析器去解析的,那上面的>去解析肯定会出错了,所以要用实体定义。上面的数据如果用PCDATA表示应该如下:

  1. if(a&gt;b){
  2. System.out.println(a);
  3. }

CDATA是在XML文档里面使用的关键字,用来告诉浏览器,这部分内容不用解析,是给其他程序用的,比如js代码等。CDATA 部分由 "<![CDATA[" 开始,由 "]]>" 结束:

  1. <script>
  2. <![CDATA[
  3. function matchwo(a,b){
  4. if (a < b && a < 0){
  5. return 1;
  6. }
  7. else{
  8. return 0;
  9. }
  10. }
  11. ]]>
  12. </script>

#PCDATA是在 XML约束文档里使用的,如DTD类型的约束文档,在这里面表示元素的内容或属性的取值范围等等,是字符串形式的

  1. <?xml version="1.0"?>
  2. <!DOCTYPE note [
  3. <!ELEMENT note (to,from,heading,body)>
  4. <!ELEMENT to      (#PCDATA)>
  5. <!ELEMENT from    (#PCDATA)>
  6. <!ELEMENT heading (#PCDATA)>
  7. <!ELEMENT body    (#PCDATA)>
  8. ]>
  9. <note>
  10. <to>George</to>
  11. <from>John</from>
  12. <heading>Reminder</heading>
  13. <body>Don't forget the meeting!</body>
  14. </note>

关于实体引用,转载了一篇文章解释的比较好:
通过字符和实体引用,可以通过引用将信息加入 XML 文档,而不必直接在文档中键入字符。在下列情况下,这样做很有用:
因为会被解释为标记,字符无法直接输入文档。
因为输入设备的限制,字符无法直接输入文档。
字符无法通过限于单字节字符的处理器可靠地传输。字符串或文档片断反复出现,并且可以缩写。为了显示内容,XML 提供了许多语法构造,以“and”符 (&) 开头,以分号 (;) 结尾。
通过字符引用,可以插入通过指向 Unicode 代码点的数字标识的 Unicode 字符。代码点可以使用十进制或十六进制表示法标识。
用于十进制引用的语法:    &#value;
用于十六进制引用的语法:  &#xvalue;

例如,要插入欧元符号,许多键盘上仍没有该字符,可以将 € 或 € 插入文档。
下表为 XML 标记使用的字符列出了五种内置实体。实体 实体引用 含义

实体 实体引用 含义
lt
&lt;
<(小于号)
gt
&gt;
>(大于号)
amp
&amp;
&(“and”符)
apos
&apos;
'(撇号或单引号)
quot
&quot;
"(双引号)

如果字符可能会使 XML 分析器错误地解释文档结构,请使用实体,而不要键入字符。&apos; 和 &quot; 实体引用最常用在属性值中。

例一: 双引号的使用。

双引号作为XML 属性值的开始结束符号,因此无法在值中直接使用"". 处理方式可以分为两种。

a: 属性值中没有'(单引号) ,那么可以用单引号'' 作为属性值的开始结束符号

<add key="IPhone" value="apple"/>  ...属性值为 ("apple").

解决:  <add key="IPhone" value=’"apple"‘/>

b: 属性值中有'(单引号) ,也有双引号。 如...属性值为 ("'apple").

<add key="IPhone" value="&quot;&apos;apple&quot;"/>

xml元素类型PCDATA和CDATA的区别(DTD中)的更多相关文章

  1. XML中PCDATA与CDATA的区别

    XML中PCDATA与CDATA的区别 2011-02-10 19:27:25|  分类: XML |  标签:xml中pcdata与cdata的区别     字号:大中小 订阅 所有 XML 文档中 ...

  2. DTD中的属性类型

    <![CDATA[文本内容]]> DTD中的属性类型 全名:character data 在标记CDATA下,所有的标记.实体引用都被忽略,而被XML处理程序一视同仁地当做字符数据看待, ...

  3. 解决:org.xml.sax.SAXParseException: 元素类型 "head" 必须由匹配的结束标记 "</head>问题

    事件背景: 今天就碰到了这样的问题, org.xml.sax.SAXParseException: 元素类型 "head" 必须由匹配的结束标记 "</head&g ...

  4. org.xml.sax.SAXParseException; lineNumber: 14; columnNumber: 32; 元素类型为 "key" 的内容必须匹配 "(column)*"

    报错:部分错误信息,主要查看CauseBy Caused by: org.hibernate.InvalidMappingException: Unable to read XML at org.hi ...

  5. org.xml.sax.SAXParseException: 元素类型 "input" 必须由匹配的结束标记 "</input>" 终止。

    错误记录 Spring Boot推荐使用thymeleaf作为视图,按照SpringBoot实战一书的案例写Demo. 发生错误: org.xml.sax.SAXParseException: 元素类 ...

  6. mybatis进行mapper.xml测试的时候发生"必须为元素类型 “mapper” 声明属性 “namespace”

    1.Caused by Caused by: org.xml.sax.SAXParseException; lineNumber: 7; columnNumber: 45; 必须为元素类型 " ...

  7. 16.XML语法、CDATA、约束(DTD、Schema)讲解

    xml主要用来描述数据,比如配置文件,网络之间传输数据等,并且在android中也经常用xml来布局,,接下来便来学习xml常用的东西 1.XML语法 xml语法分为: 1.1 文档声明 必须位于文档 ...

  8. 元素(Element)和结点(Node)的区别(org.w3c.dom)

    1.元素(Element)和结点(Node)的区别, 元素是一个小范围的定义,必须是含有完整信息的结点才是一个元素,例如 - . 但是一个结点不一定是一个元素,而一个元素一定是一个结点. 什么是nod ...

  9. 浅谈JS中的!=、== 、!==、===的用法和区别 JS中Null与Undefined的区别 读取XML文件 获取路径的方式 C#中Cookie,Session,Application的用法与区别? c#反射 抽象工厂

    浅谈JS中的!=.== .!==.===的用法和区别   var num = 1;     var str = '1';     var test = 1;     test == num  //tr ...

随机推荐

  1. BZOJ4861 [Beijing2017]魔法咒语

    题意 Chandra 是一个魔法天才.从一岁时接受火之教会洗礼之后, Chandra 就显示出对火元素无与伦比的亲和力,轻而易举地学会种种晦涩难解的法术.这也多亏 Chandra 有着常人难以企及的语 ...

  2. redis的no-appendfsync-on-rewrite参数

    redis提供了两种持久化机制,rdb和aof. 关于aof的原理,类似于预写日志,不再解释.其中几个选项如下: appendfsync always:总是写入aof文件,并完成磁盘同步appendf ...

  3. Yii错误404页面

    'errorHandler'=>array( // use 'site/error' action to display errors 'errorAction'=>YII_DEBUG ? ...

  4. SQL Sever 学习系列之三

    SQL Sever 学习系列之三 SQL Server 学习系列之一(薪酬方案+基础) SQL Server 学习系列之二(日期格式问题)         五.经理今天刚谈到with的用法(with的 ...

  5. 正确安全清空在线慢查询日志slow log的流程 (转)

    1, see the slow log status; mysql> show variables like '%slow%'; +---------------------+--------- ...

  6. MSSQL2008 常用sql语句

    一.基础 1.说明:创建数据库 Create DATABASE database-name 2.说明:删除数据库 drop database dbname 3.说明:备份sql server --- ...

  7. Qt多选框

    1.获取并显示复选框文本内容 ui->label->setText(ui->comboBox->currentText());

  8. Disconf web管理端安装

    1.环境配置配置java.maven环境,并安装mysql,reids,zookeeeper,Nginx2.下载disconf下载https://codeload.github.com/knightl ...

  9. Excel开发学习笔记:读取xml文件及csv文件

    遇到一个数据处理自动化的问题,于是打算开发一个基于excel的小工具.在业余时间一边自学一边实践,抽空把一些知识写下来以备今后参考,因为走的是盲人摸象的野路子,幼稚与错误请多包涵. ).Split(  ...

  10. windows下python访问ipv6报错

    错误 Traceback (most recent call last): File , in <module> app.run() File , in run return wsgi.r ...