1.1XML是什么
XML是指可扩展标记语言(eXtensible Markup Language),它是一种标记语言,很类似HTML。
可扩展 – 随便写
标记 – 标签
它被设计的宗旨描述数据,而非显示数据。
XML标签没有被预定义,需要用户自行定义标签。
XML技术是W3C组织(World Wide Web Consortium万维网联盟)发布的,目前遵循的是W3C组织于2000年发布的XML1.0规范。http://www.w3school.com.cn/
XML被广泛认为是继Java之后在Internet上最激动人心的新技术。
1.2XML有什么作用?
XML被设计用来传输和存储数据。
很遗憾的是,随着语言的不断进步,XML传输以及存储的功能正在逐步弱化,只有在一些极为古老的项目中还存在使用xml来传输数据.
当前XML主要是用来作为配置文件使用!!!
书写XML
XML可以被解析
XML的两种约束是什么
1.3为什么要学习XML
学习到的tomcat,maven,spring等等都需要使用XML作为配置文件!
所以我们要对XML有一定的了解!!!
xml - 可扩展的的标记语言
来自哪里 – W3C组织 万维网联盟
什么作用 – 存储数据传输(已经被淘汰)
为什么要学习xml – 作为配置文件使用!!!
1.4开始学习XML
xml语言是具有结构性的标记语言, 可以灵活的存储一对多的数据关系.
<中国>
<省 name="北京">
<市>海淀</市>
<市>丰台</市>
</省>
<省 name="山东">
<市>济南</市>
<市>青岛</市>
</省>
<省 name="湖北">
<市>武汉</市>
<市>荆州</市>
</省>
</中国>
以上这种数据, 如果通过我们学习的集合来存储的话, 需要通过多个集合的嵌套使用.
那么很显然, 数据存储的过程就非常麻烦, 但是我们今天所学习的xml文件就可以很简单的存储这种一对多的数据
xml是怎样存储数据的?
**答:以标签的形式存储 **
例 tom
1.5XML的组成
文档声明
注释
元素
元素的属性
1.5.1文档声明
什么是文档声明?
在编写XML文档时,需要先使用文档声明来声明XML文档。且必须出现在文档的第一行
这就好比我们在eclipse中写java文件的 package com.SiyualChen.test; 一样,只能放在文件的第一行。 就是个硬性的规定.
文档声明
<?xml version='1.0' encoding='UTF-8'?>
xml表示标签的名字
version表示当前文件的版本号
encoding表示当前编码, 需要跟文件的编码产生对应关系
1.5.2注释
<!--我是注释-->
1.5.3元素
-
xml中的元素其实就是一个个的标签
-
每一个xml中有且只有一个跟标签,标签可以嵌套标签
-
标签分为两种
a: 包含标签体
理解: 简括号全部成对儿出现, 所有的数据都用一对儿简括号存储
例:
<name>zhangsan</name>
<age>18</age>
b: 不包含标签体
理解: 只有最外层的一个简括号,括号用/标识结束, 内部的数据都用属性来编写
<student />
- 注意事项
严格区分大小写
只能以字母或下划线开头;abc _abc
不能以xml(或XML、Xml等)开头----W3C保留日后使用;
名称字符之间不能有空格或制表符;
名称字符之间不能使用冒号 : (有特殊用途)
一个XML文件中有且仅有一个根元素
属性名称的命名规范与元素的命名规范相同
1.5.3属性
<student name='张三'></student>
<student name='张三'/>
属性由属性名与属性值组合
属性值 必须使用单引号或者双引号包裹起来!!!
1.5.4XML练习
<?xml version="1.0" encoding="UTF-8" ?>
<!--
斗破苍穹 缥缈之旅 诛仙 鬼吹灯 神墓
天蚕土豆 萧潜 萧鼎 天下霸唱 辰东
¥86 ¥92 ¥98 ¥124 ¥128
-->
<books>
<book author ="天蚕土豆">
<name>斗破苍穹</name>
<price>86</price>
</book>
<book author ="萧潜">
<name>缥缈之旅</name>
<price>92</price>
</book>
<book author ="萧鼎">
<name>诛仙</name>
<price>98</price>
</book>
<book author ="天下霸唱">
<name>鬼吹灯</name>
<price>124</price>
</book>
<book author ="辰东">
<name>神墓</name>
<price>128</price>
</book>
</books>
xml中学生对数据的存储
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<student>
<student>
<name>ChenCHen</name>
<age>18</age>
</student>
<student name ="SiSi" age = "20"/>
<student name ="YuanYuan">
<age> 40</age>
</student>
</student>
在xml中的尖括号有自己的特殊含义,如果想要做一些使用的话怎么办?
< ; 小于
> ; 大于
& ; 和 &
&apos ; 单引号
" ; 双引号
1.6XML解析
常见的XML解析方式
DOM:Document Object Model,文档对象模型。这种方式是W3C推荐的处理XML的一种方式。
SAX:Simple API for XML。这种方式不是官方标准,属于开源社区XML-DEV,几乎所有的XML解析器都支持它。
XML解析开发包
JAXP:是SUN公司推出的解析标准实现。
Dom4J:是开源组织推出的解析开发包。(牛,大家都在用,包括SUN公司的一些技术的实现都在用。)
Dom4J – 作用 解析XML 谷歌组织开源的大赛上 xml解析 名列前茅
Dom4J – dom for java – Dom4J
Log4J
1.6.1Dom4J解析
github – 被微软收购了 全球最大的IT交流网站 – git
CSDN – 国内的IT技术交流网站
如果需要使用dom4j,必须导入jar包。
1.在项目根目录下创建一个叫lib的文件夹,将jar包复制进去
2.在jar包上点击右键,选择Add as Library… 点击
Dom4J的常用方法:
SAXReader 对象 xml文件读取器
Document read(String path);加载执行xml文档
Document 对象
Element getRootElement() :获取根元素对象(根标签)
Element 对象
List elements() :获取所有的子元素
List elements(String name):根据指定的元素名称来获取相应的所有的子元素
Element element(String name):根据指定的元素名称来获取子元素对象,如果元素名称重复,则获取第一个元素
String elementText(String name) :根据指定的子元素名称,来获取子元素中的文本
String getText():获取当前元素对象的文本
String attributeValue(String name):根据指定的属性名称获取其对应的值
二.XML约束()
3.1为什么要有约束 (DTD)?
xml可扩展的标记语言 – 开发者来讲 xml随便写 – xml格式 --造成 第三方的一些框架 没有办法解析
约束作用:约束xml书写的格式!!!— xml只能按照约束去写 那么最终写出来的格式是一个固定的格式!!!
(DTD简介)
XML都是用户自定义的标签,若出现小小的错误,软件程序将不能正确地获取文件中的内容而报错。(如:Tomcat)
XML技术中,可以编写一个文档来约束一个XML的书写规范,这个文档称之为约束
说明 : 开发中,我们很少自己编写DTD约束文档,通常情况我们都是通过框架提供的DTD约束文档,编写对应的XML文档。
3.2如何使用DTD约束文件?
3.2.1语法细节
在DTD文档中使用ELEMENT关键字来声明一个XML元素。
• 语法:<!ELEMENT 元素名称 使用规则>
使用规则:
• (#PCDATA):指示元素的主体内容只能是普通的文本.(Parsed Character Data)
• EMPTY:用于指示元素的主体为空。比如<br/>
• ANY:用于指示元素的主体内容为任意类型。
• (子元素):指示元素中包含的子元素
• 定义子元素及描述它们的关系:
– 如果子元素用逗号分开,说明必须按照声明顺序去编写XML文档。
• 如: <!ELEMENT FILE (TITLE,AUTHOR,EMAIL)
– 如果子元素用"|"分开,说明任选其一。
• 如:`<!ELEMENT FILE (TITLE|AUTHOR|EMAIL)`
–用+、*、?来表示元素出现的次数
• 如果元素后面没有+*?:表示必须且只能出现一次
• +:表示至少出现一次,一次或多次
• *:表示可有可无,零次、一次或多次
• ?:表示可以有也可以无,有的话只能有一次。零次或一次
3.2.2XML文件内部引用DTD约束
3.2.3内部DTD
<?xml version="1.0" encoding="utf-8" ?>
<!DOCTYPE 根元素名 [
... //具体的语法
]>
<?xml version="1.0" encoding="UTF-8" ?>
<!--内部 DTD 约束-->
<!DOCTYPE books[
<!ELEMENT books (book+)>
<!ELEMENT book (name, price)>
<!ELEMENT name (#PCDATA)>
<!ELEMENT price (#PCDATA)>
<!ATTLIST book author CDATA #REQUIRED>
<!-- #IMPLIED 可选 -->
]>
<!--
斗破苍穹 缥缈之旅 诛仙 鬼吹灯 神墓
天蚕土豆 萧潜 萧鼎 天下霸唱 辰东
¥86 ¥92 ¥98 ¥124 ¥128
-->
<books>
<book author ="天蚕土豆">
<name>斗破苍穹</name>
<price>86</price>
</book>
<book author ="萧潜">
<name>缥缈之旅</name>
<price>92</price>
</book>
<book author ="萧鼎">
<name>诛仙</name>
<price>98</price>
</book>
<book author ="天下霸唱">
<name>鬼吹灯</name>
<price>124</price>
</book>
<book author ="辰东">
<name>神墓</name>
<price>128</price>
</book>
</books>
三.Schema约束
简单标签 – 只有一个元素以及元素文本内容
张三
复杂标签 – 当前标签中有属性或者子标签全部或者任意一个
张三
student元素 属于一个复杂元素
复杂元素 包含属性
18 student属于复杂元素
4.1如何约束一个XML
与DTD一样,可以通过schema约束xml文档的编写规范。常见框架使用schema的有:Spring等
简单元素和复杂元素指 的是xml中的标签是简单标签还是复杂标签
简单元素:标签仅仅包含文本标签体的元素
复杂元素:标签包括子标签或属性的元素 complexType
books.xsd
<?xml version="1.0" encoding="UTF-8"?>
<schema xmlns="http://www.w3.org/2001/XMLSchema"
targetNamespace="http://www.example.org/book"
xmlns:tns="http://www.example.org/book"
elementFormDefault="qualified">
<element name="books">
<!-- 包含子元素或属性的元素被称为 `复杂元素` -->
<complexType>
<sequence>
<element name="book" minOccurs="1" maxOccurs="unbounded">
<complexType>
<sequence>
<!-- 对于拥有内容的元素, 需要编写 type 属性 -->
<element name="name" type="string"></element>
<element name="price" type="string"></element>
</sequence>
<!-- book 标签有 author 属性, 类型是字符串, 该属性必须填写 -->
<attribute name="author" type="string" use="required"></attribute>
</complexType>
</element>
</sequence>
</complexType>
</element>
</schema>