Java XML

1、XML文件介绍

配置文件:用来保存设置的一些东西。

拿IDEA来举例,比如设置的背景图片,字体信息,字号信息和主题信息等等。

(1)以前是用txt保存的,没有任何优点,而且不利于阅读,因为只保存了值,而值所代表的含义却不清楚。

515ac6e9feea4f0f8b6ba1ad63022b9d.png

(2)后面又提出了properties文件,是以键值对的形式存储数据的,拿同一个信息来说,假如有多个用户的只需要存储,却只能用一个键值对来进行存储,无法为同一个信息配置多个键值对。

adb60327ab1d4be5815430af3838565e.png

(3)所以现在来学习xml文件。xml文件可解决这个问题。

xml是可扩展的标记语言,那什么是可扩展?什么是标记语言?

标记就是标签。可扩展就是可以自定义标签。

下面是一个例子,可以很清楚地看到多个用户的不同信息。

3d0d19151722420caa13af031e261bd5.png

2、XML文件基本语法

(1)XML文件的创建

文件后缀名为.xml,注意是小写的。

477092e4dacb48689e54c8132ce9208f.png

(2)XML文件的文档声明

第一行必须是文档声明,这个不需要去背,只需输入一个<,IDEA就会自动进行提示。

version:XML默认的版本号,该属性是必须存在的。

encoding:本XML文件的编码。

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

bd02a12ac2f940e38e60d8f8f2a7cc82.png

还有一点文档声明必须放在第一行顶格写,下面这两种不放在第一行和不顶格写都是错的。44dacf18cc5b4c2c9a8c550b152c7af7.png

c40b336f26534b39ab8b0b90b34bf5dc.png

(3)XML文件的标签规则

①标签必须成对出现,比如下面的student标签,且根标签只能有一个。

②也有一些特殊的单标签,比如<br/>。

③标签里面还可以有属性以及属性的值。

④标签中的文本内容,比如张三就是name标签的文本内容。

865f8f6b6aa846fabed9887bfb2bcb10.png

(4)XML文件的注释信息:<!- 注释内容 -->

不用记,只需要选中内容然后用IDEA的快捷键就可以了:crtl+shift。

(5)XML文件中的特俗符号

由于平常用来表示大于>、小于<等等的一些符号在XML文件中是用来表示标签的开始和结束的,所以提出了别的符号用来表示大于、小于这些。

92b1e9ee51884820acc1b430fa62250c.png

(6)XML文件中的CDATA区

格式:<![CDATA[内容]]>

这种格式下的内容都会当成最原始的符号,不会有xml文件中的特殊意义,比如<就是小于的意思。

(7)代码书写要求

从左到右依次书写,当写完开始标签的>时会自动把结束标签补上。

46f051ef7b344bf79e793563847a3d51.png

3、XML文件的约束文档

由于XML文件可以自定义标签,如果随意定义会导致XML文件在解析时可能会出现问题。

为了避免这种情况的出现,就提出了一系列要求,强制程序员必须按照要求进行规定进行书写。

我们不用掌握约束文档怎么写,只需要根据给出的约束文档知道如何去编写XML文件就可以了。

约束分为两类:DTD和scheme。

(1)如何利用DTD约束文档编写一个符合要求的XML文件?

4c19f7c09ec24b8480aa4a91cf3932c6.png

我们需要掌握的有3点:

①约束文档的格式为dtd。

②如何引入本地的dtd文件。

0dc2c890ec504e5ab007e21c2f480b01.png

③如何根据约束书写XML文件。

(2)如何利用scheme约束文档编写一个符合要求的XML文件?

由于DTD约束文档没办法约束数据类型,所以提出了scheme约束文档。

(1)scheme约束文档的格式

scheme约束文档本身就是一个XML文件,也被其他的scheme约束文档所约束。

6062c067265a4977bded086ebf8b3148.png

这是一个scheme约束文档的内容,其中需要学习的就是红色方框中的内容:

953fcd1d369f47539ff9f44b907b5e4f.png

 (2)如何引入scheme约束文档?

只需这一行就可以。

5fa615bfef0d494c887c92ef38dacac9.png

上面虽然讲了这么多,但真正需要掌握的就是把scheme约束文档复制到XML文件的目录下,然后输入<之后根据提示直接使用就可以了,都不需要写第二步。

4、XML文件的解析

解析XML文件就是读取文件中的数据。

解析的方式:Dom4j。

(1)Dom4j的解析方式

这种方式是读取整个XML文件之后,按照树形结构存储,大概就是下面图示的样子。以及需要掌握Doucument、Element、Attribute和Text4个对象的含义。

4a6e4452454c4682a1430c3d67dacc07.png

(2)如何使用Dom4j解析XML文件?

首先要想使用dom4j,就要先下载包,网址:DOM4J

还有一点就是从XML文件中解析完数据之后可以封装到对象中,要不然数据都是一个个零散的。

①比如有这样一个XML文件:

<?xml version="1.0" encoding="UTF-8" ?>
<!--注释的内容-->
<!--本xml文件用来描述多个学生信息-->
<students><!--第一个学生信息--><student id="1"><name>张三</name><age>23</age></student><!--第二个学生信息--><student id="2"><name>李四</name><age>24</age></student></students>

②Student类: 

public class Student {private String id;private String name;private int age;public Student() {}public Student(String id, String name, int age) {this.id = id;this.name = name;this.age = age;}public String getId() {return id;}public void setId(String id) {this.id = id;}public String getName() {return name;}public void setName(String name) {this.name = name;}public int getAge() {return age;}public void setAge(int age) {this.age = age;}@Overridepublic String toString() {return "Student{" +"id='" + id + '\'' +", name='" + name + '\'' +", age=" + age +'}';}
}

③利用dom4j去解析XML文件: 

1.获取一个解析器对象;

2.利用解析器把xml文件加载到内存中,并返回一个文档对象;

3.获取到根标签;

4.通过根标签来获取student标签;

elements():可以获取调用者所有的子标签,并把这些子标签放到一个集合中返回。
elements("标签名"):可以获取调用者指定的所有子标签,并把这些子标签放到一个集合中并返回。

/*** 利用dom4j解析xml文件*/
public class XmlParse {public static void main(String[] args) throws DocumentException {//1.获取一个解析器对象SAXReader saxReader = new SAXReader();//2.利用解析器把xml文件加载到内存中,并返回一个文档对象Document document = saxReader.read(new File("myxml\\xml\\student.xml"));//3.获取到根标签Element rootElement = document.getRootElement();//4.通过根标签来获取student标签//elements():可以获取调用者所有的子标签.会把这些子标签放到一个集合中返回.//elements("标签名"):可以获取调用者所有的指定的子标签,会把这些子标签放到一个集合中并返回//List list = rootElement.elements();List<Element> studentElements = rootElement.elements("student");//System.out.println(list.size());//用来装学生对象ArrayList<Student> list = new ArrayList<>();//5.遍历集合,得到每一个student标签for (Element element : studentElements) {//element依次表示每一个student标签//获取id这个属性Attribute attribute = element.attribute("id");//获取id的属性值String id = attribute.getValue();//获取name标签//element("标签名"):获取调用者指定的子标签Element nameElement = element.element("name");//获取这个标签的标签体内容String name = nameElement.getText();//获取age标签Element ageElement = element.element("age");//获取age标签的标签体内容String age = ageElement.getText();//            System.out.println(id);
//            System.out.println(name);
//            System.out.println(age);Student s = new Student(id,name,Integer.parseInt(age));list.add(s);}//遍历操作for (Student student : list) {System.out.println(student);}}
}

(3)后面又提出了Xpath,可以根据如何使用Xpath解析XML文件。

Xpath底层依赖dom4j,所以如果要使用Xpath的话记得也要导dom4j的包。

有4种解析方式:绝对路径检索、相对路径检索、全文检索以及属性检索。

以及提供两个检索方法:

①selectNodes("路径"):查询满足路径的所有

②selectSingleNodes("路径"):查询满足路径的一个,如果同时有多个满足,则返回第一个。

关于路径有4种:

首先先来介绍一下各个符号的含义:/表示单级路径,//表示多级路径,@表示属性。

1.绝对路径:从根标签开始。

2.相对路径:相对于当前标签的路径,而.就表示当前标签的路径。

3.全文检索

①//name:在整个xml文件种查找name这个标签

②//person/name和//person//name两个的区别:

//person/name:是查找到person标签以后,再找person的子标签是name的。

//person//name:无论name是子标签还是孙标签都可以。

4.属性检索

①//@属性名,比如//@id

②//元素[@属性名]:查找带有属性名的标签

③//元素[@属性名 = '值']:查找带有属性为某个值的标签

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/879321.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

停车位检测-停车场车位识别

YOLO Parking Spot 概述 停车场获取的图像训练了四个YOLO模型来检测车辆。目标是收集信息&#xff0c;并可能开发一种停车解决方案以改善交通流量并优化空间利用率。通过识别汽车&#xff0c;我们生成了一份报告&#xff0c;其中包含图像细节&#xff0c;如可用停车位的数量、…

官宣:Zilliz 在亚马逊云科技中国区正式开服!

01 Zilliz Cloud 正式上线亚马逊云科技宁夏区服务 9 月 4 日&#xff0c;Zilliz 正式官宣&#xff0c; Zilliz Cloud 正式上线亚马逊云科技在宁夏区的云服务。至此&#xff0c;Zilliz Cloud 已实现全球 5 大云 19 个节点 的全覆盖&#xff0c;成为全球首个提供海内外多云服务的…

《机器学习》—— SVD奇异值分解方法对图像进行压缩

文章目录 一、SVD奇异值分解简单介绍二、代码实现—SVD奇异值分解方法对图像进行压缩 一、SVD奇异值分解简单介绍 SVD&#xff08;奇异值分解&#xff09;是一种在信号处理、统计学、线性代数、机器学习等多个领域广泛应用的矩阵分解方法。它将任何 mn 矩阵 A 分解为三个特定矩…

从0书写一个softmax分类 李沐pytorch实战

输出维度 在softmax 分类中 我们输出与类别一样多。 数据集有10个类别&#xff0c;所以网络输出维度为10。 初始化权重和偏置 torch.norma 生成一个均值为 0&#xff0c;标准差为0.01,一个形状为size(num_inputs, num_outputs)的张量偏置生成一个num_outputs 10 的一维张量&a…

Kubernetes从零到精通(10-服务Service)

Service简介 Deployment这种工作负载能管理我们应用Pod的副本数&#xff0c;并实现动态的创建和销毁&#xff0c;所以Pod本身是临时资源&#xff08;IP随时可能变化&#xff09;。现在如果某组Pod A需要访问另一组Pod B&#xff0c;A就需要在应用的配置参数里动态跟踪并更改B的…

【数学建模】相关系数

第一部分&#xff1a;相关系数简介 总体与样本&#xff1a; 总体&#xff1a;指研究对象的全体&#xff0c;比如全国人口普查数据。样本&#xff1a;从总体中抽取的一部分个体&#xff0c;如通过问卷调查收集的学生数据。 皮尔逊相关系数&#xff1a; 总体皮尔逊相关系数&…

Linux 8250串口控制器

1 8250串口类型的识别 Intel HW都使用DesignWare 8250&#xff1a; drivers/mfd/intel-lpss-pci.c drivers/tty/serial/8250/8250_dw.c IIR寄存器的高2位bit7、bit6用来识别8250串口的类型&#xff1a; 0 - 8250&#xff0c;无FIFO 0 - 并且存在SCR&#xff08;Scratch registe…

安科瑞Acrel-1000DP分布式光伏监控系统平台的设计与应用-安科瑞 蒋静

针对用户新能源接入后存在安全隐患、缺少有效监控、发电效率无法保证、收益计算困难、运行维护效率低等通点&#xff0c;提出的Acrel-1000DP分布式光伏监控系统平台&#xff0c;对整个用户电站全面监控&#xff0c;为用户实现降低能源使用成本、减轻变压器负载、余电上网&#…

如何构建大数据治理平台,助力企业数据决策

建设背景 &#xff08;1&#xff09;什么是数据资产 资产由企业及组织拥有和控制&#xff0c;能够提供增值服务、带来经济利益的重要资源。 资产不但需要管理&#xff0c; 更需要运营。 &#xff08;2&#xff09;数据资产运营中的问题 数据资产运营中存在的问题主要包括以下…

CANopen协议的理解

本文的重点是对CANopen协议的理解&#xff0c;不是编程实现 参考链接 canopen快速入门 1cia301协议介绍_哔哩哔哩_bilibili CANopen是什么&#xff1f; CANopen通讯基础&#xff08;上&#xff09;_哔哩哔哩_bilibili CANopen概述 图1. CAN报文标准帧的格式 CAN的报文可简单…

docker-compose 部署 flink

下载 flink 镜像 [rootlocalhost ~]# docker pull flink Using default tag: latest latest: Pulling from library/flink 762bedf4b1b7: Pull complete 95f9bd9906fa: Pull complete a880dee0d8e9: Pull complete 8c5deab9cbd6: Pull complete 56c142282fae: Pull comple…

Redis搭建集群

功能概述 Redis Cluster是Redis的自带的官方分布式解决方案&#xff0c;提供数据分片、高可用功能&#xff0c;在3.0版本正式推出。 使用Redis Cluster能解决负载均衡的问题&#xff0c;内部采用哈希分片规则&#xff1a; 基础架构图如下所示&#xff1a; 图中最大的虚线部分…

路由器WAN口和LAN口有什么不一样?

“ 路由器WAN口和LAN口的区别&#xff0c;WAN是广域网端口&#xff0c;LAN是本地网端口。WAN主要用于连接外部网络&#xff0c;而LAN用来连接家庭内部网络&#xff0c;两者主要会在标识上面有区别。以往大部分路由器的WAN只有一个&#xff0c;LAN口则有四个或以上&#xff0c;近…

《深度学习》—— 神经网络基本结构

前言 深度学习是一种基于神经网络的机器学习算法&#xff0c;其核心在于构建由多层神经元组成的人工神经网络&#xff0c;这些层次能够捕捉数据中的复杂结构和抽象特征。神经网络通过调整连接各层的权重&#xff0c;从大量数据中自动学习并提取特征&#xff0c;进而实现预测或…

Banana Pi BPI-SM9 AI 计算模组采用算能科技BM1688芯片方案设计

产品概述 香蕉派 Banana Pi BPI-SM9 16-ENC-A3 深度学习计算模组搭载算能科技高集成度处理器 BM1688&#xff0c;功耗低、算力强、接口丰富、兼容性好。支持INT4/INT8/FP16/BF16/FP32混合精度计算&#xff0c;可支持 16 路高清视频实时分析&#xff0c;灵活应对图像、语音、自…

Python面试宝典第48题:找丑数

题目 我们把只包含质因子2、3和5的数称作丑数&#xff08;Ugly Number&#xff09;。比如&#xff1a;6、8都是丑数&#xff0c;但14不是&#xff0c;因为它包含质因子7。习惯上&#xff0c;我们把1当做是第一个丑数。求按从小到大的顺序的第n个丑数。 示例 1&#xff1a; 输入…

基于MinerU的PDF解析API

基于MinerU的PDF解析API - MinerU的GPU镜像构建 - 基于FastAPI的PDF解析接口支持一键启动&#xff0c;已经打包到镜像中&#xff0c;自带模型权重&#xff0c;支持GPU推理加速&#xff0c;GPU速度相比CPU每页解析要快几十倍不等 主要功能 删除页眉、页脚、脚注、页码等元素&…

uniapp使用高德地图设置marker标记点,后续根据接口数据改变某个marker标记点,动态更新

最近写的一个功能属实把我难倒了,刚开始我请求一次数据获取所有标记点,然后设置到地图上,然后后面根据socket传来的数据对这些标记点实时更新,改变标记点的图片或者文字, 1:第一个想法是直接全量替换,事实证明这样不行,会很卡顿,有明显闪烁感,如果标记点比较少,就十几个可以用…

【网络安全】-rce漏洞-pikachu

rce漏洞包含命令执行漏洞与代码执行漏洞 文章目录 前言 什么是rce漏洞&#xff1f; 1.rce漏洞产生原因&#xff1a; 2.rce的分类&#xff1a; 命令执行漏洞&#xff1a; 命令拼接符&#xff1a; 常用函数&#xff1a; 代码执行漏洞&#xff1a; 常用函数&#xff1a; 分类&…

信号与线性系统综合实验

文章目录 一、实验目的二、实验内容及其结果分析&#xff08;一&#xff09;基础部分&#xff08;二&#xff09;拓展部分&#xff08;三&#xff09;应用设计部分 三、心得体会 一、实验目的 1、掌握连续时间信号与系统的时域、频域综合分析方法&#xff1b;   2、掌握运用M…