1. XML总结
1.1. XML简介
XML : 可扩展的标记语言。(和HTML非常类似的)
- 可扩展的。
- 自定义的标签。
与HTML区别: XML传输数据,HTML是显示数据。
XML的版本: XML1.0(几乎都使用该版本) XML1.1(不向下兼容)
做什么用?=>描述有关系的数据
应用
- 作为配置文件。
- 可以在系统与系统之间进行数据的传输。
- webserivice soap XML封装数据
- json 和XML概念相似
1.2. XML基本语法
-
文档声明(*****)
-
写法: <?xml version="1.0" ?> 注意:<? 和xml之间不能有空格. xml和version、encoding、standalone 必须全部小写
-
文档声明必须出现在xml文件的|–第一行和第一列–|(即该语句前面不能有空格,空行)的位置。
-
属性:
- version=“1.0” XML的版本 (必须写)
- encoding=“UTF-8” 编码集 (可选的)决定解码的方式
- standalone=“yes或者no” 代表xml的文件是否是独立的。(如果是no,不独立,可以引入外部的文件)(可选的)
- 该属性没什么卵用,因为不写该属性,也可以引入外部的文件,即该值默认为 no 。
-
乱码会伴随你们一生?
- 产生的原因:保存文件时和打开文件时采用的编码不一致。
- 解决办法:保存文件和打开文件采用的编码一致就ok。(MyEclipse不会产生乱码问题,自动转换好了)
-
-
元素(***)
-
开始标签和结束标签。
- 包含标签主体: 文本
- 不包含标签主体:
-
不能交叉嵌套
-
只能有一个根元素(必须有,并且只能有一个)
-
命名规范:
- 区分大小写 错误的: 代表两个标签
- 不能以数字和-中划线开头 错误的:<1a> <-a>
- 不能以XML(Xml XML xml)开头 错误的:
- 不能包含空格和冒号。
-
-
属性(***)
- 自定义:命名规范同上。
- 在同一个元素上,不能有相同的属性。(*****)
- 属性值可以使用双引号或者单引号。
-
注释(*)
- 和HTML的注释相同
- 注释不能嵌套。
-
特殊字符
转义字符-
< <
-
> >
-
& &
-
单个双引号 "
-
单个单引号 '
-
其中 < 和 & 符号必须转义,其他三个可以不用转义
如何在网页上显示特定的字符串?(包含一堆特殊字符,全部转义特别麻烦)
-
CDATA区
- 把标签中的内容作为字符串。
- 语法:
<![CDATA[ 内容:当成字符串直接显示 ]]>
例:
<![CDATA[ if(2<3&&32>8){ "das"&&'ds'; } ]]>
-
PI(处理指令)(没用)
- 替换HTML
1.3. XML约束
约束的分类
- DTD
- schema
- 格式良好的XML:遵循语法规范。
- 有效的XML:有约束。
1.3.1. XML约束–DTD 约束
- DTD的约束
-
快速入门
-
快速入门的步骤:
-
需要出现哪些标签?
-
在DTD的文件中编写元素
<!ELEMENT 元素名称 (元素类型)> -
判断元素是否是复杂还是简单元素?
- 如果是简单元素:(#PCDATA) 代表是字符串,必须有()
- 如果是复杂元素:(子节点1,子节点2 …) 内部是子结点的元素名称
-
需要在book.xml引入外部DTD的文件
-
-
DTD与XML文档的关联方式
-
可以在XML的文件中直接书写DTD的代码。(经常使用)
-
引入本地的DTD文件(经常使用)
-
引入网络上的DTD文件(偶尔使用)
-
-
元素定义
-
语法:<!ELEMENT 元素名称 元素类型>
-
(#PCDATA) 字符串,中间可以为空
-
EMPTY 空,标签内部不能包含数据,不能包括空格、换行
-
ANY 任意的,中间可以为空,可以为字符串,可以为(子元素)
-
(子元素)
-
子元素:
-
子元素之间的关系
, 子元素出现是有顺序的
| 子元素只能出现一个 -
子元素出现的次数
+ 子元素出现1次或多次
* 子元素出现0次或多次
? 子元素出现0次或1次
在子元素名后,加上数量的限定
<!ELEMENT MYFILE ((TITLE*, AUTHOR?, EMAIL)* | COMMENT)> <MYFILE> <TITLE></TITLE> <AUTHOR></AUTHOR> <EMAIL></EMAIL> <TITLE></TITLE> <AUTHOR></AUTHOR> <EMAIL></EMAIL> <TITLE></TITLE> <AUTHOR></AUTHOR> <EMAIL></EMAIL> </MYFILE>
-
-
-
-
属性定义(AttributeList)
-
写法:
<!ATTLIST 元素名称 属性名称 属性类型 属性约束 和数据库中表中数据的定义 相似 属性名称 属性类型 属性约束 >
-
属性类型
- CDATA 字符串
- 枚举(没有提供关键字) (男人|女人)–>枚举可能结果视为枚举类型声明
- ID 代表唯一的值,不能以数字开头
-
属性的约束
- #IMPLIED 可选的
- #REQUIRED 必须出现的
以下两个属性,在前面定义了,即使相应的元素中没有写,也存在,相应属性是固定值/默认值
- #FIXED 固定值 ,格式为: #FIXED “值”
- 默认值 直接在属性类型后加上该默认值 (很少用)
注意:一个元素内只能有一个 ID 属性,且 ID 属性后面的约束只能是
#REQUIRED 或者 #IMPLIED,不能是 #FIXED 或者 默认值例:
<!ARRLIST 书 页数 CDATA #REQUIRED 必须出现的 赠送 (赠送|非赠送) #IMPLIED 可选 编号 ID #REQUIRED ID类型 二维码 CDATA #FIXED "哈哈哈" 固定值 出版国家 CDATA "中国" 默认值 >
-
实体定义(用的不多)
* <!ENTITY 别名 "值" >
在元素中引用 &别名; 最终在浏览器中显示的是 “值”* 需要在xml中引入别名,浏览器打开文件后,在引入的位置上显示值的。
例:
dtd 内容:
<!ATTLIST ...> <!ENTITY haha "卧槽"> ]> xml 内容: <书>&haha;</书> 这里的&haha; 在浏览器中显示为 "卧槽"
-
-
示例: student.dtd
<?xml version="1.0" encoding="UTF-8"?>
<!ELEMENT 班级 (学生+)>
<!ELEMENT 学生 (姓名,年龄,身高,体重)>
<!ELEMENT 姓名 (#PCDATA)>
<!ELEMENT 年龄 (#PCDATA)>
<!ELEMENT 身高 (#PCDATA)>
<!ELEMENT 体重 (#PCDATA)>
<!ATTLIST 班级
编号 ID #REQUIRED
年级 CDATA "三年级"
学校名 CDATA #FIXED "西北工业大学"
>
<!ATTLIST 学生
编号 ID #REQUIRED
性别 (男|女) #REQUIRED
癖好 CDATA #IMPLIED
>
对应的 xml文件:
<?xml version="1.0" encoding="utf-8" ?>
<班级 编号="des3" 年级="大一" 学校='西工大' xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns="http://www.example.org/student"
xsi:schemaLocation=" http://www.example.org/student student.xsd">
<学生 编号="d3" 性别="女" >
<姓名>阿娇</姓名>
<年龄>50</年龄>
<身高>150</身高>
<体重>40</体重>
</学生>
<学生 编号="df3" 性别="男">
<姓名>薛鹏</姓名>
<年龄>55</年龄>