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

文章介绍了XML的基本概念,包括其作为数据表示格式的特点和使用场景。XML的创建涉及文件格式和语法规则,文档约束如DTD和Schema用于规范XML结构。DOM解析和XPath是XML解析的两种方式,XPath提供更高效的元素检索。此外,文中还提到了工厂设计模式和装饰设计模式在对象创建和功能扩展中的应用。
摘要由CSDN通过智能技术生成


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 中最常用的设计模式之一,这种类型的设计模式属于创建型模式,它提供了一种获取对象的方式

工厂设计模式的作用:

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

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


装饰设计模式

装饰设计模式概述

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

装饰设计模式的作用:

  • 装饰模式指的是在不改变原类的基础上,动态地扩展一个类的功能
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值