什么是XML?
XML指可扩展标记语言(EXtensible Markup Language),被设计用来传输和存储数据。
XML是一种标记语言,很类似 HTML。
XML的设计宗旨是传输数据,而非显示数据。
XML标签没有被预定义。您需要自行定义标签。
XML被设计为具有自我描述性。
XML是 W3C 的推荐标准。
比较XML和HTML:
XML不是 HTML 的替代。
XML和 HTML 为不同的目的而设计:XML 被设计为传输和存储数据,其焦点是数据的内容。HTML 被设计用来显示数据,其焦点是数据的外观。
HTML旨在显示信息,而 XML 旨在传输信息。
HTML语法比较松散,xml语法严格
HTML所有标签都是预先定义好的, 使用固定的标签,展示不同的内容。XML当中的标签都是自己定义的。
在XML中,空格会被保留,HTML 会把多个连续的空格字符裁减(合并)为一个。
XML的作用:数据存储配置文件数据传输
XML的基本语法规则:
(1)文档声明:<?xml version="1.0">必须在第一行
(2)所有 XML 元素都须有关闭标签
(3)XML 标签对大小写敏感
(4)XML 必须正确地嵌套
(5)XML 文档必须有根元素
(6)XML 的属性值须加引号
(7)实体引用
在XML中,一些字符拥有特殊的意义。
如果你把字符"<"放在 XML 元素中,会发生错误,这是因为解析器会把它当作新元素的开始。这样会产生 XML 错误:为了避免这个错误,请用实体引用来代替 "<" 字符:
5个预定义的实体引用
<; <小于
> >大于
& & 和号
' ' 单引号
" " 引号
注释:在XML中,只有字符 "<" 和 "&" 确实是非法的。大于号是合法的,但是用实体引用来代替它是一个好习惯。
(8)<![CDATA[数据内容]]>里面的数据会原样显示
(9)属性值必须引用引起,单双都行。
例子:
![](https://img.haomeiwen.com/i2510475/4efafaad8cc64699.png)
XML树形结构:
![](https://img.haomeiwen.com/i2510475/3d28063bec1ffbad.png)
![](https://img.haomeiwen.com/i2510475/45787d3325f9e450.png)
XML约束:
什么是约束:规定文档当中只能写哪些标签。并且会给一些提示。
约束分类:
1、DTD约束:<!DOCTYPE 根元素 [元素声明]>
(1)内部dtd:在xml当中定义的dtd
(2)外部dtd:在外部文件当中单独定义的dtd
①本地:<!DOCTYPE 名称 SYSTEM "student.dtd">
②网络:<!DOCTYPE students PUBLIC"命名空间" "student.dtd">
约束语法
![](https://img.haomeiwen.com/i2510475/9bbab2f3111d3f4a.png)
存在的问题
在标签当中存放的内容不知道是什么类型。
(2)schema:XML Schema 支持数据类型和命名空间。
复杂标签:标签当中还有子标签
简单标签:标签当中没有子标签了
语法
①type 起的别名
complexType name="students"
sequence
element name="" minOccur相当于dtd的*
simpleTyle
restriction base="xsd:string"限制简单标签当中的数据类型
schema分析
![](https://img.haomeiwen.com/i2510475/29a6d6c473e5e4f2.png)
使用过程
①编写根标签
②引用约束地址xsi:schemaLocation="默认空间 约束地址.xsd"
③引用实例名称空间
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
④默认名称空间xmlns="http://www.it666.cn/xml"
DOM:Document Object Model:文档对象模型,把文档中的成员描述成一个个对象. 使用Java代码操作XML 或者 js代码操作HTML。
DOM解析的特点
(1)在加载的时候,一次性的把整个XML文档加载进内存,在内存中形成一颗树(Document对象).
(2)以后使用代码操作Document,其实操作的是内存中的DOM树,和本地磁盘中的XML文件没有直接关系.
(3)由于操作的是内存当中的dom,磁盘中xml当中的内容并没有变,要进行同步,让两边保持一致
(4)查询不需要同步,只有数据变化的时候,才需要同步
缺点:若XML文件过大,可能造成内存溢出.
DOM解析步骤
1.创建解析器工厂
2.通过解析器工厂得到解析器
3.通过解析器得到document对象
4.获取具体的节点内容
![](https://img.haomeiwen.com/i2510475/2fd589ac0c2d1e7a.png)
例子:
![](https://img.haomeiwen.com/i2510475/24af0de43b8474ad.png)
![](https://img.haomeiwen.com/i2510475/1d257f09bb21fce6.png)
运行结果:
![](https://img.haomeiwen.com/i2510475/0bd98a4a2de5382e.png)
DOM修改元素内容:
1.获取所有指定节点
2.获取要修改的节点
3.修改元素内容
4.从内存写到文档做同步操作
![](https://img.haomeiwen.com/i2510475/6b401e92a0345a20.png)
DOM添加元素
1.创建一个节点
2.设置元素内容
3.获取要添加元素的父结点
4.添加节点
5.从内存写到文档做同步操作
![](https://img.haomeiwen.com/i2510475/cda0de37a1cd41c3.png)
DOM删除元素
1.获取一个节点
2.获取该节点的父节点,从父节点当中移除
3.从内存写到文档做同步操作
![](https://img.haomeiwen.com/i2510475/6782b6c4b5978255.png)
DOM添加元素属性
1.获取要添加属性的节点
2.把获取的节点强制转换成element
3.设置属性
4.从内存写到文档做同步操作
![](https://img.haomeiwen.com/i2510475/f10cf5266cec9c69.png)
Sax解析:
逐行读取,基于事件驱动
优点:不占内存,速度快
缺点:只能读取,不能回写
DOM4j介绍
DOM4J是dom4j.org出品的一个开源XML解析包。
dom4j是一个十分优秀的JavaXML API,具有性能优异、功能强大和极其易使用的特点,它的性能超过sun公司官方的dom技术,同时它也是一个开放源代码的软件
越来越多的Java软件都在使用dom4j来读写XML,特别值得一提的是连Sun的JAXM也在用dom4j。这已经是必须使用的jar包, Hibernate也用它来读写配置文件。
DOM4j解析:
创建SAXReader
读取指定路径的xml
获取所有指定标签内容
1.创建SAXReader
2.获取根元素
3.获取根元素下所有的元素
4.遍历每一个子元素
5.获取指定名称的元素
6.获取标签当中的文本
获取全部标签内容
1.创建SAXReader
2.获取根元素
3.获取根元素下所有的元素
4.遍历每一个子元素
![](https://img.haomeiwen.com/i2510475/f7a5af8aea444bb3.png)
添加元素
1.创建SAXReader
2.获取根元素
3.给根元素添加元素和属性,并返回添加的元素
![](https://img.haomeiwen.com/i2510475/34d24b080bfcac61.png)
网友评论