1. xml简介:
- eXtensible Markup Language:可扩展标记语言
标记型语言:html是标记型语言,都是用标签操作
可扩展:html里面的标签是固定的,每个标签都有特定的含义
标签可以自定义,可以写成中文的标签eg:<猫></猫> - xml的用途
主要的功能是存储数据,也可以显示数据 - xml是w3c组织发布的技术
- xml有两个版本1.0和1.1
经常用的是1.0,因为1.1向下兼容
2. xml的应用
-
不同的系统之间传输数据
-
用来表示生活中有关系的数据
- 经常用来配置文件
3. xml语法
4. xml的文档声明
文件后缀名 .xml
第一步必须有个文档声明,表示写了xml文件的内容
<?xml version="1.0" encoding="gbk"?>
//必须写在第一行第一列
- 属性:
version
:xml版本1.0
encoding
:xml编码 gbk utf-8 iso8859-1(不包含中文)
standalone
:是否依赖其他文件 yes/no -
xml中文乱码问题
保存时候的编码和设置打开时的编码一致,不会出现乱码
5. 定义元素(标签)
- 标签的定义有开始必须有结束
标签没有内容,可以在标签内结束eg:<a/>
标签可以合理嵌套
一个xml文档只有一个跟标签,其他标签必须在这个标签下面写
在xml中空格和换行都会当成代码解析
<aa>11111</aa>
<aa>
11111
</aa>
//两个表示的不一样
- 命名规范:
可以是中文
大小写区分
不能用数字和下划线开头
不能以xml、XML、xmla等开头
不能包含空格和冒号
6. 定义属性
- 属性定义的要求:
一个标签可以有多个属性
属性名称不能相同
属性名称和属性值之间用=,属性值使用引号包起来
7. 注释
< !-- -->
注释不能嵌套
注释不能放在第一行
8. 特殊字符
转义字符
特殊字符 | 替代字符 |
---|---|
& | & |
< | < ; //没有空格 |
> | > ; |
" | &quo t; |
' | &apos ; |
9. CDATA区
可以解决多个字符都需要转译的操作
写法
<![CDATA[.....]]>
把特殊字符当作文本内容而不是标签
10. PI指令
可以在xm中设置样式
<?xml version="1.0" encoding="utf-8"?>
<?xml-stylesheet type="text/css" href="css的路径"?>
//对中文的标签名称不起作用
11.xml的约束
- 约束的技术:dtd约束,schema约束
12. dtd快速入门
- 创建一个文件后缀.dtd
步骤:- 看xml中有多少个元素,有几个元素,在dtd文件中写几个 <!ELEMENT>
- 判断元素是否是简单元素
简单元素:没有子元素的元素
<!ELEMENT 元素名称(#PCDATA)>
复杂元素:有子元素的元素
<!ELEMENT 元素名称(子元素)>
- 在xml中引入dtd文件
<!DOCTYPE person SYSTEM"dtd文件的路径">
如果打开xml文件使用浏览器打开的,浏览器只负责校验xml的语法,不负责校验约束
13. dtd的三种引入方式
- 引入外部文件
`<!DOCTYPE person SYSTEM"dtd文件的路径">`
- 使用内部的dtd文件
<!DOCTYPE 根元素名称 [
<!ELEMENT person(name, age)>
<!ELEMENT person(#PCDATA)>
<!ELEMENT age(#PCDSTS)>
]>
- 使用外部的dtd文件
<!DOCTYPE 根元素 PUBLIC "DTD名称" "DTD文档的URL">
学习到sturts2使用配置文件,使用外部的DTD文件
14.使用dtd定义元素
语法<!ELEMENT 元素名约束>
- 简单元素:没有子元素的元素
<!ELEMENT 元素名称(#PCDATA)>
:约束name是字符串类型;
<EMPTY>
:元素为空(没有内容)
<ANY>
:任意 - 复杂元素:有子元素的元素
<!ELEMENT 元素名称(子元素)>
表示元素出现的次数:+:表示一次或多次;?:表示零次或者一次;* :表示零次或者多次
<!ELEMENT 元素名称 (name, age,sex,school)>
:子元素用,
隔开,表示元素出现的顺序;|
:表示只能出现其中的一个
15.使用dtd定义属性
- 语法:
- CDATA:字符串
<!ATTLIST birthday ID1 CDATA #REQUIRED>
- 枚举:表示只能在一定的范围里面选择出现的值,
<!ATTLIST age ID2 (aa|bb|cc) #REQUIRED>
- ID:值只能是字母或者数字开头
- 属性的约束:
-
#REQUIRED
:属性必须存在 -
#IMPLIED
:属性可有可无 -
#FIXED
:表示一个固定值#FIXED "aaa";属性的值必须是设置的这个值
-
<! ATTLIST sex ID CDATA #FIXED "aaa">
- 直接值:不写属性,使用直接值,写了属性,使用设置的值
<!ATTLIST school ID CDATA "www">
16. 实体的定义
语法:<!ELEMENT TEST "hhhhhh">
使用实体:&实体名称;
注意:定义实体需要写在内部dtd里面,如果写在外部dtd里面,有些浏览器鞋,内容得不到
17. xml的解析简介
解析方式:两种:dom和sax方式
dom解析 :
sam解析:
- 想要解析xml,首先需要解析器
不同的公司和组织提供了针对dom和sax方式的解析器,通过api方式提供:
sum公司,dom4j组织,jdom组织,针对dom和sax分别提供了:jaxp、dom4j、jdom解析器
18. jaxp
jaxp时javase的一部分
- jaxp解析器在jdk的javax.xml.parsers包里面
四个类:分别是针对dom和sax解析使用的类- dom:
DocumentBuilder
:解析器类
这个类是一个抽象类,不能new,此类的实力可以从DocumentBuilderFactory.newDocumentBulider()
方法获得
一个方法,可一个解析xml parse("xml路径")
返回的是Document整个文档
放回的document是一个借口,父节点是Node,如果在document里面找不到想要的方法,到Node里面去找
DocumentBuliderFactory
:解析器工厂
这个类也是一个抽象类,不能new
newInstanse()
获取DocumentBuilderFactory
的实例
2.sax:
SAXParser
:解析器类
SAXParserFactory
:解析器工厂
- dom:
- 使用jaxp