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的版本和编码方式等属性)
例如:
(不用特意记,idea会自动生成)
- version: XML默认的版本号码、该属性是必须存在的
- encoding: 本XML文件的编码
XML的标签(元素)规则
- 标签由一对尖括号和合法标识符组成,如:,必须存在一个根标签,有且只能有一个
- 标签必须成对出现,有开始,有结束,如:
- 特殊的标签可以不成对,但是必须有结束标记,如:
- 标签中可以定义属性,属性和标签名空格隔开,属性值必须用引号引起来
- 标签需要正确的嵌套
XML的其他组成
- XML文件中可以定义注释信息:
XML文件中可以存在以下特殊字符(转义字符)
转义字符 |
描述 |
显示结果 |
十进制 |
 ; |
空格 |
; |
|
<; |
小于号 |
<; |
|
>; |
大于号 |
> |
>; |
&; |
与号 |
& |
&; |
"; |
引号 |
“ |
“; |
×; |
乘号 |
x |
; |
÷; |
除号 |
➗ |
; |
(有时候会出现“>”不需要转移的情况,不用管即可,“>”是需要与前面的“”就可以不用换)
文档约束
文档约束是用来限定xml文件中的标签以及属性应该怎么写,以此强制约束程序员必须按照文档约束的规定来编写xml文件
为什么要进行文档约束?
- 由于XML文件可以自定义标签,导致XML文件可以随意定义,程序在解析的时候可能出现问题
文档约束的分类
- DTD
- schema
XML文档约束-DTD的使用 (了解)
需求:利用DTD文档约束,约束一个XML文件的编写
步骤分析:
- ①编写DTD约束文档,后缀必须是.dtd
- ②在需要编写的XML文件中导入该DTD约束文档
- ③按照约束的规定编写XML文件的内容
比如说DTD约束文档的名称为 “data.dtd”,那么XML文件的导入约束文件的操作为:
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 elements() |
得到当前元素下所有子元素 |
List 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 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 中最常用的设计模式之一,这种类型的设计模式属于创建型模式,它提供了一种获取对象的方式
工厂设计模式的作用:
- 工厂的方法可以封装对象的创建细节,比如:为该对象进行加工和数据注入
- 可以实现类与类之间的解操作(核心思想)
装饰设计模式
装饰设计模式概述
- 创建一个新类,包装原始类,从而在新类中提升原来类的功能(比如缓冲流)
装饰设计模式的作用:
- 装饰模式指的是在不改变原类的基础上服务器托管网,动态地扩展一个类的功能
服务器托管,北京服务器托管,服务器租用 http://www.fwqtg.net
机房租用,北京机房租用,IDC机房托管, http://www.fwqtg.net