xml:可扩展标记语言,是一种标记语言
xml没有固定的标签,所有的标签都可以自己定义
作用:
数据存储
数据交换
数据配置
1、使用DTD
(1)内部DTD定义:
1、内部DTD的定义,语法如下
<!DOCTYPE 根元素 [元素声明]>
2、元素声明语法:
<!ELEMENT 元素名 (子元素[,子元素...])>
3、数量词
1)+:表示出现1次或多次,至少一次
2)?:表示出现0次或1次
3)*:表示出现任意次
4、属性声明语法:
1)属性类型:CDATA,表示字符数据(character data)
2)默认值:
#REQUIRED,表示必须出现
#IMPIED,表是不是必须的
5、带DTD的完整xml代码:
<?xml version="1.0" encoding="utf-8" ?>
<!-- 声明内部DTD -->
<!DOCTYPE scores [
<!ELEMENT scores (student+)>
<!ELEMENT student (name,course,score)>
<!ATTLIST student id CDATA #REQUIRED> <!-- student 的id属性为字符串,必须有 -->
<!ELEMENT name (#PCDATA)> <!-- #PCDATA只能写文本 -->
<!ELEMENT course (#PCDATA)>
<!ELEMENT score (#PCDADA)>
]>
<scores>
<student id="1">
<name>张三</name>
<course>java</course>
<score>90</score>
</student>
<student id="2">
<name>李四</name>
<course>sql</course>
<score>96</score>
</student>
</scores>
(2)外部DTD定义
1、创建一个独立的dtd文件
<!-- 声明外部DTD -->
<!DOCTYPE scores [
<!ELEMENT scores (student+)>
<!ELEMENT student (name,course,score)>
<!ATTLIST student id CDATA #REQUIRED> <!-- student 的id属性为字符串,必须有 -->
<!ELEMENT name (#PCDATA)> <!-- #PCDATA只能写文本 -->
<!ELEMENT course (#PCDATA)>
<!ELEMENT score (#PCDADA)>
]>
2、在xml中引入外部DTD文件
<?xml version="1.0" encoding="utf-8" ?>
<!-- 引入外部DTD文件 -->
<!DOCTYPE scores SYSTEM "student.dtd">
<scores>
<student id="1">
<name>张三</name>
<course>java</course>
<score>90</score>
</student>
<student id="2">
<name>李四</name>
<course>sql</course>
<score>96</score>
</student>
</scores>
解析:操作xml文档,将文档中的数据读取到内存中
2、操作xml文档:
1、读取:将文档中的数据读取到内存中
2、写入:将内存中的数据保存到xml文档中。持久化的存储
解析xml的的方式:
1、DOM:将标记语言文档一次性加载进内存,在内存中形成一颗dom树
优点:操作方便,可以对文档进行CRUD的所有操作
缺点:占内存
2、SAX:逐行读取,基于事件驱动的
优点:不占内存
缺点:只能读取,不能增删改
3、JDOM:比DOM更快,仅使用具体类而不使用接口
4、DOM4J:Java XML API ,JDOM的升级版
使用接口而不是类