欢迎您访问365答案网,请分享给你的朋友!
生活常识 学习资料

补漏之XML配置文件基本使用

时间:2023-06-06

theme: channing-cyan
highlight: androidstudio 文章目录

theme: channing-cyan highlight: androidstudio 前言基本的XML结构

格式CDATA 域 xml 约束

DTD 约束Schema 约束

生明引用 XML 解析

Jsoup

「这是我参与2022首次更文挑战的第19天,活动详情查看:2022首次更文挑战」

前言

差不多寒假要结束了,先补个漏,为后面的源码学习铺路,Letcode我是没想到的,我还以为这个寒假我能刷个300道题目来着的,高估了…简单题没意思,难题有的很偏那个做起来可能半个上午,一个上午就没了,我是想明白了,有这个时间,不如把dp 回溯,分治,递归,贪心,字符串匹配算法kmp,sunday,树,map,各种“数”的问题等等重新过几遍,然后刷蓝桥杯去。

那么今天主要是把以前欠下的内容补回来,主要还是针对java web 的内容,我是直接从python Django跳过来的,一来就玩spring mybatis,然后玩springboot mvc(web-starter) 所以什么Tomcat,servelet我直接跳过来的,现在后面得去看看源码,这个部分的内容我是得去看看的,其实我感觉也没啥,当初python 一来玩的是Nginx,uwgc 其实一样,无非是看几个api,省的我到时候debug去查文档。回去之后,边看源码边准备各种比赛,分布式,面试。然后大三专心准备考研。

基本的XML结构

<?xml version="1.0" encoding="utf-8" ?> 小明 15 小刚 15

直接看这个结构其实非常简单。如果学习过html的话,你会发现其实这个xml和html很像,其实这个xml就是html的弟弟。我们可以直接通过标签去定义我们的一些属性,一些值。

格式

对于xml的格式的话基本上和HTML一样注意闭合即可,我们可以按照自己的意愿去定义任意一个xml文件,使得它具备存储数据的能力,你唯一需要注意的就是,注意头部

<?xml version="1.0" encoding="utf-8" ?>

这个一定要加在第一行

之后是最外层标签,这个最外层标签类似于标签,一个文件只能有一个。

CDATA 域

这个是我们xml文件需要注意的第二点,就是如果我们想要随意书写一些数据的话,同时这些数据含有特殊符号的话,你需要将它放在这里面。

<?xml version="1.0" encoding="utf-8" ?> 小明 15

这个就是在单纯的xml文件里面我们需要注意的点,但是这个并不够,因为我们此时定义的标签是我们自己定义的,根本就没有统一,如果你的程序想要让别人编写一下xml文件的话,例如spring的配置文件,如果你想让你别人按照你的规则来书写xml文件,然后在将来推出你自己的框架的话。

xml 约束

这个其实就是定义一下如何书写你定义的xml文件,例如我们前面定义了,这样的XML文件

<?xml version="1.0" encoding="utf-8" ?> 小明 15 小刚 15

如何让别人也能够按照这样的格式去书写XML文件。

所以为了实现这个功能,我们这里引入了约束这种东西,我们这样介绍两种约束。

DTD 约束

这个是第一个约束,也是最简单的约束
你只需要定义你的标签和格式就行了。

Student.dtd文件

首先我们定义了一个元素 students 这个是最外层的元素
然后这个元素包含了student
student 又包含了name age sex
name age sex 分别是什么类型
之后定义了一个student元素的id 这个id和html的id是一个意思。

之后我们引入就行了。

<?xml version="1.0" encoding="utf-8" ?> 小明 15

这个时候别在编写文件的时候就会按照你的格式去编写了,idea直接给你提示。

Schema 约束

这个约束可以实现比较复杂的约束,当然结构其实和dtd是类似的,但是要复杂一点看起来。同时这个约束也是项目里面经常见到的。

生明

我们先来看看一个标准的文件长啥样吧

<?xml version="1.0"?>

xmlns:xs="http://www.w3.org/2001/XMLSchema"

显示 schema 中用到的元素和数据类型来自命名空间 http://www.w3.org/2021/XMLSchema。同时它还规定了来自命名空间
http://www.w3.org/2021/XMLSchema” 的元素和数据类型应该使用前缀 xs:

targetNamespace="http://www.w3school.com.cn"

显示被此 schema 定义的元素 (note, to, from, heading, body) 来自命名空间: “http://www.w3school.com.cn”。

xmlns="http://www.w3school.com.cn"

指出默认的命名空间是"http://www.w3school.com.cn"

elementFormDefault="qualified"

指出任何 XML 实例文档所使用的且在此 schema 中声明过的元素必须被命名空间限定。

引用

这里的话回到我们具体的例子,
我们现在把我们的dtd改成schema

Student.xsd

<?xml version="1.0" encoding="UTF-8" ?>

使用就是

<?xml version="1.0" encoding="utf-8" ?> 小明 15

如果你还有引用的话你就可以使用命名空间把他们区分开来

<?xml version="1.0" encoding="utf-8" ?> 小明 15

这个使用是比较灵活的,看你具体的情况。

这里注意如果你嫌麻烦的话

这个 xsd 文件开头你可以直接抄

```

引用的话也是idea有提示

就非常方便

XML 解析

现在我们已经大概熟悉了xml文件的构造和编写约束了,那么现在我们应该考虑如何拿到我们的数据了。

这个解析的话有两种方式一种就是基于DOM操作的解析,这个可以实现对DOM的操作,还有一种是SAX 这个呢是逐行读取,是只能读取不能修改。

我们这里实现的话就是直接使用Jsoup就行了,因为那个xml也是一个标签语言嘛,也是可以解析的,而且好像这个还是java爬虫的html解析库,这个我就不太清楚了,我玩python 的话一般是使用lxml解析,直接使用css选择器,这个也是类似dom操作的,还有就是直接用正则表达式,至于“beautifulsoup”那玩意慢地要死,而且api还不好记,还不如正则,不如lxml。

Jsoup

我们下载好jar包,然后放在项目里面就行了,或者直接创建maven工程,导入官方配置文件。

这个jsoup其实操作还是很简单的。就两步,第一找到你的文件位置,第二解析,其他的步骤就是调用api,这个看编辑器的提示基本上就能coding。

public class JsoupDome1 { public static void main(String[] args) throws IOException { String path = Objects.requireNonNull(JsoupDome1.class.getResource("XML-Resource/Student.xml")).getPath(); document parse = Jsoup.parse(new File(path), "utf-8"); Elements names = parse.getElementsByTag("name"); if(names.size()>0){ Element element = names.get(0); System.out.println(element.text()); } }}

这样我就提取出了第一个元素。

现在我拿到学生的信息

public class JsoupDome1 { public static void main(String[] args) throws IOException { String path = Objects.requireNonNull(JsoupDome1.class.getResource("XML-Resource/Student.xml")).getPath(); document parse = Jsoup.parse(new File(path), "utf-8"); Element xiaoming = parse.getElementById("001"); Elements children = xiaoming.children(); for(int i=0;i

可以看到非常简单就实现了这样的功能。
所以后面我们完全自己结合反射,注解自己实现一套IOC容器便于自己的项目管理。

其他的话,非常简单,可以直接去看文档,或者直接在idea里面去“点”一下看看,看看API的名字,然后看看源码就知道了。

这里我们使用jsoup,后面还方便curd xml文件,这样可以实现注解注入,还是很方便的。
说到这里真不得不说,python就是个老流氓,一个setting.py把一堆事情全部干完了,看看django项目源码比spring项目爽太多了。

Copyright © 2016-2020 www.365daan.com All Rights Reserved. 365答案网 版权所有 备案号:

部分内容来自互联网,版权归原作者所有,如有冒犯请联系我们,我们将在三个工作时内妥善处理。