XML
一,XML入门
1.xml概述
- 可扩展标记语言, 标签可以自定义
2.xml特点
- xml所有标签都是自定义
- xml语法严格,区分大小写; 要么全部小写,要么全部大写
- xml描述数据
3.xml作用
- 作为配置文件(在JavaEE中的SSM框架中常用)
- 存储数据
- 用来传输数据,通用数据交换格式(现在Json用的多,xml少)
- 描述有关系的数据
4.xml语法
(1)文档声明
- (必选项) <?xml version = "1.0" ?>
(2)元素(标签)
- 文档中必须有且只能有一个根元素,其他标签都是这个根标签的子标签或孙标签
- 元素需要正确闭合
[1]包含标签主体:
<mytag>somecontent</mytag>
[2]不含标签主体:
<mytag/>
-
元素需要正确的嵌套,不允许有交叉嵌套
-
元素名称区分大小写
[1]元素名称区分大小写
[2]数字不能开头
[3]标签之间不能有空格 -
属性
[1] 属性值必须用引号引起来.单双引号都行
[2]在一个标签里面属性不能重复 -
注释
[1] 文档声明前面不能有注释
[2] 注释不能嵌套 -
特殊符号和CDATA区
[1] 在XML中有5个预定义的实体引用
[2] CDATA内部的所有东西都会被解析器忽略,当做文本
- 语法
<![CDATA[ 内容 ] ]>
二,XML约束
1. xml约束概述
- 约束就是xml的书写规则;
- 约束文档定义了在XML中允许出现的元素(标签)名称、属性及元素(标签)出现的顺序等等。
2.dtd约束
2.1 引入方式
2.1.1 内部引入
<!DOCTYPE 根元素 [元素声明]>
2.1.2 外部引入; dtd是一个独立的文件 .dtd
- [常用]本地DTD
<!DOCTYPE 根元素 SYSTEM "文件名">
- 网络DTD
<!DOCTYPE 根元素 PUBLIC "DTD名称" "DTD文档的URL">
2.2 语法
2.2.1 元素
(1)元素 : <!ELEMENT 元素名称 元素组成>
- 元素组成:EMPTY,ANY ,(子元素) ,(#PCDATA)
- 如果出现子元素: ?(出现0次或1次),
*(出现0次或多次),
+(出现1次或多次) 表示子元素出现的个数.
|或者(只能出现一个)
, 代表子元素出现必须按照顺序
(2)属性<!ATTLIST 元素名称 属性名称 属性类型 属性使用规则>
- 属性类型: ID,枚举,CDATA
- 使用规则: #REQUIRED:属性值是必需的
#IMPLIED :属性不是必需的
#FIXED value:属性值是固定的
ID使用:字母开头
3. schema约束
3.1 schema与dtd的区别
-
XMLSchema符合XML语法结构。
-
DOM、SAX等XMLAPI很容易解析出XML Schema文档中的内容。
-
XMLSchema对名称空间支持得非常好。
-
XMLSchema比XML DTD支持更多的数据类型,并支持用户自定义新的数据类型。
-
XMLSchema定义约束的能力非常强大,可以对XML实例文档作出细致的语义限制。
-
XMLSchema不能像DTD一样定义实体,比DTD更复杂.
3.2 根据schema约束写xml文件步骤
(1) 查出Schema文档,找出根元素
(2)根元素来自哪个名称空间
(3) 这个名称空间和哪个xsd文件对应(指定约束的路径)
(4)schemaLocation不是关键字,来自一个标准的名称空间
三,XML解析【掌握】
1. xml解析方式
1.1 DOM解析
(1) 概述:
- 将xml文档加载到内存,形成一颗dom树(document对象),将文档的各个组成部封装为一些对象。
(2) 优缺点:
- 优点: 因为,在内存中会形成dom树,可以对dom树进行增删改查。
- 缺点: 如果xml文件太大, dom树非常占内存,解析速度慢。
(3) 节点
- Document:文档节点
- Element:元素(标签)节点
- Text:文本节点
- Attribute:属性节点
- Comment:注释节点
1.2 SAX解析
1.2.1 概述:
- 逐行读取,基于事件(函数或者方法)驱动
1.2.2 优缺点:
- 优点:内存占用很小,速度快
- 缺点:只能读取,不能回写
2.常用xml解析器(jar包)
- [常用] DOM4J:
document for java 民间方式,但是是事实方式。非常好。 支持dom和sax. - JDOM
- JSOUP: 爬虫, 解析html .
- JAXP:sun公司提供的解析。支持dom和sax.
3.Dom4J(Dom for Java) 【重点】
3.1 使用步骤
(1) 导入jar包 dom4j-1.6.1j.jar
(2) 创建解析器
- SAXReader reader = new SAXReader();
(3) 读取xml 获得document对象
- Document document = reader.read(xml对应的流)
(4) 得到根元素
- Element rootElement = document.getRootElement();
3.2 常见的API
- List list= element.elements(); 获取所有子元素节点
- element.attributeValue(“属性名”)或者element.attribute(“属性名”).getValue(); 获取节点属性的值
- element.getText(); 获得节点的文本值
4.XPath的使用,基于dom4J【掌握】
4.1 概述
- Xpath定义了一种规则,专门用于查询xml, 可以认为xpath是dom4J的扩展
4.2 使用步骤
(1)导入jar包 jaxen…jar(当前资料里是: jaxen-1.1-beta-6.jar) 注意: 两个(dom4j的jar包和xpath的jar包)
(2)创建解析器
- SAXReader reader = new SAXReader();
(3) 解析xml 获得document对象
- Document document = reader.read(is);
4.3 常见的API
(1) document.selectSingleNode(“xpath语法”); 获得一个节点(标签,元素)
(2) document.selectNodes(“xpath语法”); 获得多个节点(标签,元素)
具体学习最好查阅 " W3C "