5 XML的组成:字符区(了解)
当大量的转义字符出现在xml文档中时,会使XML文档的可读性大幅度降低。这时如果使用CDATA段就会好一些。
CDATA (Character Data)字符数据区,格式如下:
<![CDATA[ 文本数据 < > & ; " " ]]>
- CDATA 指的是不应由 XML 解析器进行解析的文本数据(Unparsed Character Data)
- CDATA 部分由
<![CDATA[
开始,由]]>
结束;
例如:
<![CDATA[ if salary < 1000 then ]]
快捷模板:CD 回车
注意:
CDATA 部分不能包含字符串 “]]>”。也不允许嵌套的 CDATA 部分。
标记 CDATA 部分结尾的 “]]>” 不能包含空格或折行。
小结:
原样显示(书写的内容不会被xml解析器解析)
6DTD约束(能够看懂即可)
1什么是DTD
DTD(Document Type Definition),文档类型定义,用来约束XML文档。规定XML文档中元素的名称,子元素的名称及顺序,元素的属性等。
2DTD约束的实现和语法规则(看懂dtd约束,书写符合规范的xml文件)
开发中,我们不会自己编写DTD约束文档,通常情况我们都是通过框架提供的DTD约束文档,编写对应的XML文档。
需求:接下来我们创建一个dtd约束文档,然后按照约束文档书写符合规范的xml文件。
我们先新建一个books.xml文件。
第一步:在项目下面创建一个dtd的文件夹,然后选中文件夹,鼠标右击,新创键一个books.xml文件
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-oTtoRvkX-1687767096552)(imgs\8.bmp)]
第二步:我们先书写books.xml文件中的内容:
<?xml version="1.0" encoding="UTF-8"?> <books> <book> <name>面试宝典</name> <author>锁哥</author> <price>78.8</price> </book> <book> <name>java从入门到精通</name> <author>黑旋风</author> <price>88.8</price> </book> </books>
经过上述四步我们就将books.xml文件书写完毕,接下来我们开始书写DTD约束。
关于DTD约束我们能够看懂即可。如下所示就是上述books.xml文件引入了DTD约束。
简单的DTD约束就写好了,如下所示:
我们直接将如下约束复制到我们上述书写好的books.xml文件中即可,能够读懂即可。
<?xml version="1.0" encoding="UTF-8"?> <!-- 1.在xml内部定义dtd约束的声明 : <!DOCTYPE 根元素 [元素声明]> 2.xml的元素(标签)的声明: <!ELEMENT 元素名称 (元素内容)> <!ELEMENT books (book)> 表示books标签下是book标签 <!ELEMENT book (name,author,price)> 表示的是book标签下出现的name,author,price子标签 <!ELEMENT name (#PCDATA)> 表示name标签中出现的内容是文本 --> <!DOCTYPE books [ <!--约束根标签 book* 表示books标签下可以有多个book子标签 * + ? 和正则表达式中表示的意思是一样的 * : 0 1 n + : 1 n ? : 0 1 --> <!ELEMENT books (book*)> <!--约束book标签--> <!ELEMENT book (name,author,price)> <!--约束name,author,price标签 但是这三个标签下就是文本了 #PCDATA 表示标签下内容是文本 --> <!ELEMENT name (#PCDATA)> <!ELEMENT author (#PCDATA)> <!ELEMENT price (#PCDATA)> ]> <books> <book> <name>面试宝典</name> <author>锁哥</author> <price>78.8</price> </book> <book> <name>java从入门到精通</name> <author>黑旋风</author> <price>88.8</price> </book> </books>
说明:
1)xml中出现的标签,也叫做元素。那么我们书写的约束可以规范xml中到底能出现哪些标签。除此之外都不能出现。
所以xml中出现的标签都需要我们开发者在dtd约束中声明一下。只有声明了这个标签,xml中才能出现这个标签。如果约束中没有声明,那么xml中就不能出现。
所以,xml中出现的标签需要使用如下的语法(也就是xml中元素的声明语法)。
在xml内部定义dtd约束的声明 :
<!DOCTYPE 根元素 [元素声明]>
xml的元素(标签)的声明:
<!ELEMENT 元素名称 (元素内容)>
元素名:自定义。
元素内容包括:符号、数据类型和标签。
常见符号:? * + () |
常见数据类型:#PCDATA 表示内容是文本,不能是子标签。
标签:就是正常子标签。
2)由于 <!ELEMENT book (name,author,price)> 顺序是name,author,price,所以下面的顺序也得是:
<book> <name>面试宝典</name> <author>锁哥</author> <price>78.8</price> </book>
前后顺序不能换。
接下来对上述代码的标签添加属性,比如给book属性添加一个address地址,表示将书存放到哪里。
添加属性之后的代码如下所示:
<!DOCTYPE books [ <!--约束根标签 book* 表示books标签下可以有多个book子标签 * + ? 和正则表达式中表示的意思是一样的 --> <!ELEMENT books (book*)> <!--约束book标签--> <!ELEMENT book (name,author,price)> <!--约束name,author,price标签 但是这三个标签下就是文本了 #PCDATA 表示标签下内容是文本 --> <!ELEMENT name (#PCDATA)> <!ELEMENT author (#PCDATA)> <!ELEMENT price (#PCDATA)> <!ATTLIST book address CDATA "图书馆" id ID #REQUIRED > ]> <books> <book address="藏经阁" id="a1"> <name>面试宝典</name> <author>锁哥</author> <price>78.8</price> </book> <book id="a2"> <name>java从入门到精通</name> <author>黑旋风</author> <price>88.8</price> </book> </books> <!DOCT
对上述声明属性进行解释说明:
元素名称: 表示该属性使用在哪个标签上;
属性名称: 表示在标签上添加的属性名字;
属性类型: 添加的属性类型。
属性类型有如下几种:
类型 描述
CDATA 值为字符数据 (character data)
(en1|en2|…) 此值是枚举列表中的一个值
ID 值为唯一的 id
默认值: 表示最开始给属性的默认值。
值 解释
值 属性的默认值
#REQUIRED 属性值是必需的
#IMPLIED 属性不是必需的
#FIXED value 属性值是固定的