XML概述
XML是可扩展标记语言(eXtensible Markup Lanquaqe)的缩写,它是一种数据表示格式,可以描述非常复杂的数据结构,常用于传输和存储数据
XML的几个特点
-
一是纯文本,默认使用UTF-8编码;二是可嵌套
-
如果把XML内容存为文件,那么它就是一个XML文件
XML的使用场景
- XML内容经常被当成消息进行网络传输,或者作为配置文件用于存储系统的信息
XML的创建
就是创建一个XML类型的文件,要求文件的后缀必须使用xml,如hello_world.xml
IDEA创建XML文件的操作步骤
我们一般都会选择把文件建到需要使用该文件的Class文件的所属src下
XML的语法规则
-
XML文件的后缀名为: xml
-
文档声明必须是第一行
(XML文档的第一行必须是XML声明(排头声明),该部分指明了XML的版本和编码方式等属性)
例如:
<?xml version="1.0"encoding="UTF-8”?>
(不用特意记,idea会自动生成)
-
version: XML默认的版本号码、该属性是必须存在的
-
encoding: 本XML文件的编码
XML的标签(元素)规则
-
标签由一对尖括号和合法标识符组成,如:< name >< /name >,必须存在一个根标签,有且只能有一个
-
标签必须成对出现,有开始,有结束,如: < name >< /name >
-
特殊的标签可以不成对,但是必须有结束标记,如:< br/ >
-
标签中可以定义属性,属性和标签名空格隔开,属性值必须用引号引起来< name student id=“1” >< /name >
-
标签需要正确的嵌套
XML的其他组成
- XML文件中可以定义注释信息: < !- -注释内容 - - >
XML文件中可以存在以下特殊字符(转义字符)
转义字符 | 描述 | 显示结果 | 十进制 |
---|---|---|---|
 ; | 空格 |  ; | |
<; | 小于号 | < | <; |
>; | 大于号 | > | >; |
&; | 与号 | & | &; |
"; | 引号 | " | "; |
×; | 乘号 | x | ×; |
÷; | 除号 | ➗ | ÷; |
(有时候会出现“>”不需要转移的情况,不用管即可,“>”是需要与前面的“<”配合使用,如果前面没有单独的“<”,那么“>”就可以不用换)
文档约束
文档约束是用来限定xml文件中的标签以及属性应该怎么写,以此强制约束程序员必须按照文档约束的规定来编写xml文件
为什么要进行文档约束?
- 由于XML文件可以自定义标签,导致XML文件可以随意定义,程序在解析的时候可能出现问题
文档约束的分类
-
DTD
-
schema
XML文档约束-DTD的使用 (了解)
需求:利用DTD文档约束,约束一个XML文件的编写
步骤分析:
-
①编写DTD约束文档,后缀必须是.dtd
-
②在需要编写的XML文件中导入该DTD约束文档
-
③按照约束的规定编写XML文件的内容
比如说DTD约束文档的名称为 “data.dtd”,那么XML文件的导入约束文件的操作为:
< !DOCTYPE SYSTEM “data.dtd” >
XML的文档约束-DTD的作用和问题?
-
作用:可以约束XML文件的编写
-
问题:不能约束具体的数据类型
文档约束-schema
-
schema可以约束具体的数据类型,约束能力上更强大
-
schema本身也是一个xml文件,本身也受到其他约束文件的要求,所以编写的更加严谨
模型图如下
XML文档约束-schema的使用 (了解)
需求: 利用schema文档约束,约束一个XML文件的编写
步骤分析:
-
①编写schema约束文档,后缀必须是.xsd
-
②在需要编写的XML文件中导入该schema约束文档
-
③按照约束内容编写XML文件的标签
XML的文档约束-schema的优点
- 可以约束XML文件的标签内容格式,以及具体的数据类型
(之所以不说这些约束文档的编写,是因为以后我们不需要写,直接找或者等着别人发给我们即可)
XML解析
XML的数据的作用是:存储数据、做配置信息、进行数据传输
最终需要被程序进行读取,解析里面的信息
XML解析
- 使用程序读取XML中的数据
两种解析方式
-
SAX解析
-
DOM解析
DOM解析
Dom常见的解析工具
名称 | 说明 |
---|---|
JAXP | SUN公司提供的一套XML的解析的API |
JDOM | JDOM是一个开源项目,它基于树型结构,利用纯JAVA的技术对XML文档实现解析、生成、序列化以及多种操作 |
dom4j | 是JDOM的升级品,用来读写XML文件的。具有性能优异、功能强大和极其易使用的特点,它的性能超过sun公司官方的dom 技术,同时它也是一个开放源代码的软件,Hibernate也用它来读写配置文件 |
jsoup | 功能强大DOM方式的XML解析开发包,尤其对HTML解析更加方便 |
Dom解析常用技术框架:Dom4j,所以我只说Dom4j
DOM解析解析文档对象模型
如以下信息
模型
使用Dom4j解析出XML文件
需求:使用Dom4j把一个XML文件的数据进行解析
步骤分析:
-
①下载Dom4j框架,官网下载
-
②在项目中创建一个文件夹: lib
-
③将dom4j-2.1.1.jar文件复制到 lib 文件夹
-
④在jar文件上点右键,选择Add as Library -> 点击OK
-
⑤在类中导包使用
链接: dom4j下载
其实我们只需要jar包即可
Dom4j解析XML-得到Document对象相关API
SAXReader类
构造器/方法 | 说明 |
---|---|
public SAXReader() | 创建Dom4J的解析器对象 |
Document read(String url) | 加载XML文件成为Document对象 |
Document类
方法名称 | 说明 |
---|---|
Element getRootElement() | 获得根元素对象 |
Dom4j解析XML的元素、属性、文本相关API
方法名称 | 说明 |
---|---|
List< Element > elements() | 得到当前元素下所有子元素 |
List< Element > elements(String name) | 得到当前元素下指定名字的子元素返回集合 |
Element element(String name) | 得到当前元素下指定名字的子元素,如果有很多名字相同的返回第一个 |
String getName() | 得到元素名字 |
String attributeValue(String name) | 通过属性名直接得到属性值 |
String elementText(子元素名) | 得到指定名称的子元素的文本 |
String getText() | 得到文本 |
Dom4j的解析思想:得到文档对象Document,从中获取元素对象和内容
XPath
如果需要从XML文件中检索需要的某个信息 (如name)
-
Dom4i需要进行文件的全部解析,然后再寻找数据
-
而Xpath技术更加适合做信息检索
XPath介绍
-
XPath在解析XML文档方面提供了一独树一帜的路径思想,更加优雅,高效
-
XPath使用路径表达式来定位XML文档中的元素节点或属性节点
表达式示例
-
/元素/子元素/孙元素
-
//子元素//孙元素
使用Xpath检索出XML文件
需求:使用Dom4J把一个XML文件的数据进行解析
步骤分析:
-
①导入jar包(dom4j和jaxen-1.1.2.jar),Xpath技术依赖Dom4i技术
-
②通过dom4j的SAXReader获取Document对象
-
③利用XPath提供的APl,结合XPath的语法完成选取XML文档元素节点进行解析操作
Document中与Xpath相关的API如下:
方法名称 | 说明 |
---|---|
Node selectSingleNode(“表达式”) | 获取符合表达式的唯一元素 |
List< Node > selectNodes(“表达式”) | 获取符合表达式的元素集合 |
Xpath的四大检索方案
-
绝对路径
-
相对路径
-
全文检索
-
属性查找
绝对路径: /根元素/子元素/子元素
- 采用绝对路径获取从根节点开始逐层的查找/contactList/contact/name节点列表并打印信息
方法名称 | 说明 |
---|---|
/根元素/子元素/孙元素 | 从根元素开始,一级一级向下查找,不能跨级 |
相对路径: ./子元素/子元素 (.代表了当前元素)
-
先得到根节点contactList
-
再采用相对路径获取下一级contact 节点的name子节点并打印信息
方法名称 | 说明 |
---|---|
./子元素/孙元素 | 从当前元素开始,一级一级向下查找,不能跨级 |
全文搜索:
直接全文搜索所有的name元素并打印
-
//元素:在全文找这个元素
-
//元素1/元素2:在全文找元素1下面的一级元素2
-
//元素1//元素2:在全文找元素1下面的全部元素2
方法名称 | 说明 |
---|---|
//contact | 找contact元素,无论元素在哪里 |
//contact/name | 找contact,无论在哪一级,但name一定是contact的子节点 |
//contact//name | contact无论在哪一种,name只要是contact的子孙元素都可以找到 |
属性查找
方法名称 | 说明 |
---|---|
//@属性名称 | 查找属性对象,无论是哪个元素,只要有这个属性即可 |
//元素 [@属性名称] | 查找元素对象,全文搜索指定元素名和属性名 |
//元素 [@属性名称=‘值’] | 查找元素对象,全文搜索指定元素名和属性名,并且属性值相等 |
工厂设计模式
工厂设计模式概述
-
之前我们创建类对象时,都是使用new对象的形式创建在很多业务场景下也提供了不直接new的方式
-
工厂模式(Factory Patern)是Java 中最常用的设计模式之一,这种类型的设计模式属于创建型模式,它提供了一种获取对象的方式
工厂设计模式的作用:
-
工厂的方法可以封装对象的创建细节,比如:为该对象进行加工和数据注入
-
可以实现类与类之间的解操作(核心思想)
装饰设计模式
装饰设计模式概述
- 创建一个新类,包装原始类,从而在新类中提升原来类的功能(比如缓冲流)
装饰设计模式的作用:
- 装饰模式指的是在不改变原类的基础上,动态地扩展一个类的功能