XML
xml:可扩展标记语言 标签可以随便写文章源自JAVA秀-https://www.javaxiu.com/537.html
<aaa> <就是酷> <font>文章源自JAVA秀-https://www.javaxiu.com/537.html
</aaa> </就是酷> </font>文章源自JAVA秀-https://www.javaxiu.com/537.html
作用
可以作为项目的配置文件来使用文章源自JAVA秀-https://www.javaxiu.com/537.html
企业:.propertiies key=value键值对形式文章源自JAVA秀-https://www.javaxiu.com/537.html
.xml 层级结构形式文章源自JAVA秀-https://www.javaxiu.com/537.html
语法
xml的语法要比html更加严格文章源自JAVA秀-https://www.javaxiu.com/537.html
1 内容必须要有标签文章源自JAVA秀-https://www.javaxiu.com/537.html
2 有开始标签就一定要有结束标签文章源自JAVA秀-https://www.javaxiu.com/537.html
3 标签严格区分大小写文章源自JAVA秀-https://www.javaxiu.com/537.html
xml的组成
声明 标签元素 属性元素 注释 转义字符 cdata区域文章源自JAVA秀-https://www.javaxiu.com/537.html
声明:告诉别人自己是一个xml文件 格式:<?xml version="1.0" encoding="utf-8"?> 注意:声明必须放在第一行第一列 标签元素:自定义标签 格式:<xxx>内容</xxx> 属性元素: 在定义标签中可以自定义属性 格式:<xxx 属性名1=“属性值1” 属性名2=“属性值2” ....>内容</xxx> 注意:属性值必须得用双引号或者是单引号包裹 ps:可以用来指定某一组标签 注释:格式 <!-- --> 和html一样 可以出现在xml的任意地方 任意多次 转义字符: 空格: < :< > :> &: & cdata区域(了解): 只要放入cdata区域的内容 任何特殊符号都不需要在转义了 都会给你原样进行输出 格式:<![CDATA[内容]]>
总结:文章源自JAVA秀-https://www.javaxiu.com/537.html
满足以下条件的xml文件文章源自JAVA秀-https://www.javaxiu.com/537.html
1 组成部分中语法的要求文章源自JAVA秀-https://www.javaxiu.com/537.html
2 必须有一个且只有一个根标签文章源自JAVA秀-https://www.javaxiu.com/537.html
称之为格式良好的xml文件文章源自JAVA秀-https://www.javaxiu.com/537.html
xml的解析
为什么要解析xml:为了获取xml中的内容文章源自JAVA秀-https://www.javaxiu.com/537.html
如何解析:DOM解析 SAX解析 PULL解析常见3种解析技术文章源自JAVA秀-https://www.javaxiu.com/537.html
DOM解析和SAX解析的区别(面试题)文章源自JAVA秀-https://www.javaxiu.com/537.html
DOM解析 解析方式: 把整个xml文档加载到内存中形成一颗DOM树 这个DOM就是该xml标签的层级关系 优点: 因为dom树是层级关系 可以快速做增删改查 缺点: 可以因为文件的过大 造成内存溢出 SAX解析 解析方式: 逐行加载 逐行解析 优点: 不会因为文件的过大 造成内存溢出 缺点: 只能做查询 不能做增删改
解析xml的工具包
好处:不需要自己一步一步去实现解析过程,因为市面上给我们提供了封装好的解析工具包文章源自JAVA秀-https://www.javaxiu.com/537.html
Dom4j:比较简单的的解析开发包(掌握) 底层:DOM解析技术文章源自JAVA秀-https://www.javaxiu.com/537.html
JDom:与Dom4j类似文章源自JAVA秀-https://www.javaxiu.com/537.html
Jsoup:功能强大DOM方式的XML解析开发包,对HTML解析也更加的方便(爬虫技术)文章源自JAVA秀-https://www.javaxiu.com/537.html
使用Dom4j工具包解析xml的流程步骤文章源自JAVA秀-https://www.javaxiu.com/537.html
Dom4j工具包解析xml的流程:DOM解析技术 1 导包 dom4j-1.6.1.jar 2 编写一个xml 3 调用api进行解析
Xpath的方式解析xml(了解)---按照路径
使用DOM4J工具包解析:根据根标签找子标签的方式确实可以获取到xml的数据文章源自JAVA秀-https://www.javaxiu.com/537.html
但是如果子标签很多获取起来过于繁琐,所以我们可以也可以使用xpath的方式获取文章源自JAVA秀-https://www.javaxiu.com/537.html
Xpath的方式解析xml 基于dom4j(要先用dom4j获取到dom树才能操作)文章源自JAVA秀-https://www.javaxiu.com/537.html
使用步骤:文章源自JAVA秀-https://www.javaxiu.com/537.html
1 导包 dom4j-1.6.1.jar jaxen-1.1-beta-6.jar
2 特点:按照路径去查找
3 方法api
selectSingleNode("路径"); 获取的是单一的值 是按照上下的顺序获取
selectNodes("路径"); 获取是多个 返回值是list<Node>
4 路径的写法
/: 从根路径开始 绝对路径表达式
//: 指定的任意路径开始 全文搜索路径表达式
: 条件筛选 谓语
标签名[属性名=属性值]
XML的约束(了解)
作用:文章源自JAVA秀-https://www.javaxiu.com/537.html
限制xml可以出现哪些标签 不能出现哪些标签 限制xml标签出现的次数 限制xml标签出现的顺序
应用场景:文章源自JAVA秀-https://www.javaxiu.com/537.html
自己定义一个框架的时候 需要编写对xml约束语法 框架提供了配置文件--要求用户按照约束语法的内容来写配置文件
要求:文章源自JAVA秀-https://www.javaxiu.com/537.html
看的懂dtd和schema的约束语法内容 根据约束语法内容会编写xml文件即可
约束的分类:dtd约束 schema约束文章源自JAVA秀-https://www.javaxiu.com/537.html
dtd约束:内部方式 外部方式文章源自JAVA秀-https://www.javaxiu.com/537.html
内部方式文章源自JAVA秀-https://www.javaxiu.com/537.html
直接在xml文档中书写 格式:<!DOCTYPE 根标签 [要约束的标签内容]>
外部方式文章源自JAVA秀-https://www.javaxiu.com/537.html
在外部创建一个约束文档 在需要的xml中引入约束文档 本地:格式:<!DOCTYPE 根元素名称 SYSTEM "约束文件的名称"> 约束文档在本地电脑上 网络:格式:<!DOCTYPE 根元素名称 PUBLIC "约束文件的名称" "约束文件在网路上的地址"> 约束文档在网络上
dtd约束的语法文章源自JAVA秀-https://www.javaxiu.com/537.html
标签元素:文章源自JAVA秀-https://www.javaxiu.com/537.html
声明元素:<!ELEMENT 元素名称 类别> 元素名称:要约束标签名称 类别: EMPTY 空 (#PCDATA) 字符串 ANY 任意内容 (子元素名称 1,子元素名称 2,.....) 简单元素:元素里面直接是文本内容 复杂元素:元素里面还有子元素 次数控制:如果是子元素,可以使用 ?(可以出现0次或1次), *(可以出现0次或多次), +(出现1次或多次)来规定子元素出现的次数 顺序控制:, 控制顺序 | 元素或的关系
元素属性:文章源自JAVA秀-https://www.javaxiu.com/537.html
属性:<!ATTLIST 元素名称 属性名称 属性类型 默认值> 属性类型 CDATA 字符串 默认值 #REQUIRED 必填 #IMPLIED 可选
schema约束文章源自JAVA秀-https://www.javaxiu.com/537.html
Schema与DTD区别:文章源自JAVA秀-https://www.javaxiu.com/537.html
1.DTD语法自成一派.Schema就是一个XML文档.
2.Schema可以更方便被XML的解析器所解析.
3.Schema提供了更多的数据类型.
4.Schema支持名称空间.
5.Schema的扩展名是xsd
使用条件:需要创建外部xsd文件格式,然后在xml文档中引入该约束文章源自JAVA秀-https://www.javaxiu.com/537.html
外部xsd文件的格式: <schema xmlns="http://www.w3.org/2001/XMLSchema" targetNamespace="约束文件的别名(名称空间)" elementFormDefault="qualified"> <element> ..... </schema> 在xml中引入外部的xsd约束文件: <根标签名称 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="约束文件的别名" xsi:schemaLocation="约束文件的别名 约束文件名"> </根标签>
工厂模式+反射+配置文件(理解)
概述
在程序中我们一直在使用实例化对象的方式(new 对象),这样的方式到底好不好呢?文章源自JAVA秀-https://www.javaxiu.com/537.html
答案是当然没有任何问题,写出来的代码清晰,但是有一个问题就是,如果以后需要修改,那么这样的方式是及其麻烦的。如果我们在代码中实例化对象有一百行乃至成千上万行,那么想修改成实例化其他对象的时候,带来的工作量也就不言而喻了。文章源自JAVA秀-https://www.javaxiu.com/537.html
那么,问题产生了,我们应该如何解决呢?由硬编码(写死的编码)修改成可灵活动态变化的代码,让程序自己决 定创建的对象会不会更好呢?文章源自JAVA秀-https://www.javaxiu.com/537.html
解决技术: 配置文件+反射+工厂 (IOC)文章源自JAVA秀-https://www.javaxiu.com/537.html
解决问题:可以不修改任何源码的情况下,实现多套实例对象功能文章源自JAVA秀-https://www.javaxiu.com/537.html
总结
xml
xml的作用:充当配置文件 .properties .xml 1 xml的语法结构:比html严格很多 1 声明 要求:必须第一行第一列 <?出来了 2 标签元素 完全都是自定义 (咱们不关心写的什么标签,关心的是标签中的内容) 3 标签元素的属性 在标签元素上可以写多个 多个之间用空格隔开 属性值必须用双引号或单引号包裹 4 注释 和html一样 <!-- --> 可以出现声明以外的任何地方 出现多次 5 转义字符 空格: <:< >:> 6 CDATA区:可以将一些特殊的符号原样输出(淘汰了) 2 xml的解析:为了获取xml中的标签内容 常见的2中解析xml的技术:DOM解析 SAX解析 DOM解析和SAX解析 dom解析(企业) 特点:一次性将xml文件加载到内存中形成dom树 好处:dom树都是有标签的关系和层级结构组成 方便增删改查 缺点:如果xml文件过大 容易造成内存溢出 SAX解析 特点:逐行加载 逐行解析 好处:不会造成内存溢出 缺点:只能做查询 不能做增删改 我们使用了别人提供的第三方工具包来解析xml:dom4j工具包 底层: dom解析方式 API: * 获取解析器: new SAXReader() * 获取根标签: document.getRootElement(); * 获取子标签: 父标签元素.elements(); * 获取标签属性:标签元素.attributeValue("属性名"); * 获取标签名: 标签元素.getName(); * 获取文本内容: 标签元素.getText(); xpath:基于dom4j 特点:根据路径找标签元素 /: 从根路径查找 绝对路径表达式 //:从xml全文直接查找 全文搜索路径表达式 @:做查询条件 谓语 api: selectSingleNode("路径"); 获取的是单一的值 是按照上下的顺序获取 selectNodes("路径"); 获取是多个 返回值是list<Node> 3 xml的约束 作用:限制配置文件可以出现哪些标签 标签出现的顺序 标签出现的次数 有2种方式来约束:dtd schema dtd: 内部 外部(本地 网络) schema:外部 dtd: 次数 ?(0~1) *(0~N) +(1~N) 顺序: ,来界定顺序 | 来界定顺序 schema: 内置的一些属性控制 目标:看到约束 能够编写xml文档
配置文件+反射+工厂模式 spring框架ioc的底层
作用:在不修改源代码的基础上,可以套用多个实例对象 (解耦合) 编写:看代码文章源自JAVA秀-https://www.javaxiu.com/537.html

评论