XML的创建、文档约束、XML解析、工厂设计模式和装饰设计模式概述


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文件中可以存在以下特殊字符(转义字符)

转义字符描述显示结果十进制
&nbsp;空格&#160;
&lt;小于号<&#60;
&gt;大于号>&#62;
&amp;与号&&#38;
&quot;引号"&#34;
&times;乘号x&#215;
&divide;除号&#247;

(有时候会出现“>”不需要转移的情况,不用管即可,“>”是需要与前面的“<”配合使用,如果前面没有单独的“<”,那么“>”就可以不用换)


文档约束

文档约束是用来限定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常见的解析工具

名称说明
JAXPSUN公司提供的一套XML的解析的API
JDOMJDOM是一个开源项目,它基于树型结构,利用纯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//namecontact无论在哪一种,name只要是contact的子孙元素都可以找到

属性查找

方法名称说明
//@属性名称查找属性对象,无论是哪个元素,只要有这个属性即可
//元素 [@属性名称]查找元素对象,全文搜索指定元素名和属性名
//元素 [@属性名称=‘值’]查找元素对象,全文搜索指定元素名和属性名,并且属性值相等

工厂设计模式

工厂设计模式概述

  • 之前我们创建类对象时,都是使用new对象的形式创建在很多业务场景下也提供了不直接new的方式

  • 工厂模式(Factory Patern)是Java 中最常用的设计模式之一,这种类型的设计模式属于创建型模式,它提供了一种获取对象的方式

工厂设计模式的作用:

  • 工厂的方法可以封装对象的创建细节,比如:为该对象进行加工和数据注入

  • 可以实现类与类之间的解操作(核心思想)


装饰设计模式

装饰设计模式概述

  • 创建一个新类,包装原始类,从而在新类中提升原来类的功能(比如缓冲流)

装饰设计模式的作用:

  • 装饰模式指的是在不改变原类的基础上,动态地扩展一个类的功能
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值