栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

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

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

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


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结构



    
        小明
        15
        
    
    
    
        小刚
        15
        
    

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

格式

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

这个一定要加在第一行

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

CDATA 域

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




    
        小明
        15
        
         
        
    
    


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

xml 约束

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




    
        小明
        15
        
    
    
    
        小刚
        15
        
    

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

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

DTD 约束

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

Student.dtd文件







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

之后我们引入就行了。




    
        小明
        15
        
    

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

Schema 约束

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

生明

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




    
      
	
	
	
	
      
    

    

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




    
    

    
        
            

            
        
    

    
        
            
            
            
        
        
    

    
        

        
    

    
        
            
            
        
    

    
        
            
            
        
    

    
        
    


使用就是




    
        小明
        15
        
    

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




    
        小明
        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项目爽太多了。

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/737612.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号