day25-XML
1.xml
1.1概述【理解】
1.2语法规则【应用】
1.5DTD约束【理解】
1.6schema约束【理解】
1.4xml解析【应用】
-
概述
xml解析就是从xml中获取到数据
-
常见的解析思想
DOM(Document Object Model)文档对象模型:就是把文档的各个组成部分看做成对应的对象。
会把xml文件全部加载到内存,在内存中形成一个树形结构,再获取对应的值 -
解析的准备工作
-
我们可以通过网站:https://dom4j.github.io/ 去下载dom4j
今天的资料中已经提供,我们不用再单独下载了,直接使用即可
-
将提供好的dom4j-1.6.1.zip解压,找到里面的dom4j-1.6.1.jar
-
在idea中当前模块下新建一个libs文件夹,将jar包复制到文件夹中
-
选中jar包 -> 右键 -> 选择add as library即可
-
-
需求
- 解析提供好的xml文件
- 将解析到的数据封装到学生对象中
- 并将学生对象存储到ArrayList集合中
- 遍历集合
- 代码实现
<?xml version="1.0" encoding="UTF-8" ?>
<students><!--第一个学生信息--><student id="1"><name>张三</name><age>23</age></student><!--第二个学生信息--><student id="2"><name>李四</name><age>24</age></student></students>
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;}/*** 获取* @return id*/public String getId() {return id;}/*** 设置* @param id*/public void setId(String id) {this.id = id;}/*** 获取* @return name*/public String getName() {return name;}/*** 设置* @param name*/public void setName(String name) {this.name = name;}/*** 获取* @return age*/public int getAge() {return age;}/*** 设置* @param age*/public void setAge(int age) {this.age = age;}public String toString() {return "Student{id = " + id + ", name = " + name + ", age = " + age + "}";}
}
import org.dom4j.Attribute;
import org.dom4j.Document;
import org.dom4j.DocumentException;
import org.dom4j.Element;
import org.dom4j.io.SAXReader;import java.io.File;
import java.util.ArrayList;
import java.util.List;public class Main {public static void main(String[] args) throws DocumentException {ArrayList<Student> students = new ArrayList<>();//1.创建解析器对象SAXReader saxReader = new SAXReader();//2.利用解析器去读取xml文件,并返回文档对象File file = new File("hello.xml");Document document = saxReader.read(file);//3.下面一层一层解析//4.获取根标签Element rootElement = document.getRootElement();//5.获取根标签的子标签List<Element> elements = rootElement.elements();for (Element element : elements) {//6. 获取里面的内容//获取属性和属性值Attribute id = element.attribute("id");String idValue = id.getText();//或者String idValue_ = element.attributeValue("id");//7.获取对应的标签和标签值Element name = element.element("name");String nameValue = name.getText();Element age = element.element("age");int ageValue =Integer.parseInt(age.getText());//8.把Student对象添加到集合中Student student = new Student(idValue, nameValue, ageValue);students.add(student);}System.out.println(students);//[Student{id = 1, name = 张三, age = 23}, Student{id = 2, name = 李四, age = 24}]}
}
2.Xpath
jaxen包下载
<?xml version="1.0" encoding="UTF-8" ?><students><!--第一个学生信息--><student id="1"><name>张三</name><age>23</age></student><!--第二个学生信息--><student id="2"><name>李四</name><age>24</age></student></students>
-
selectNodes
:public class Main {public static void main(String[] args) throws DocumentException {ArrayList<Student> students = new ArrayList<>();//1.创建解析器对象SAXReader saxReader = new SAXReader();//2.利用解析器去读取xml文件,并返回文档对象File file = new File("hello.xml");Document document = saxReader.read(file);//3.利用xpath方式快速检索List<Node> nodes = document.selectNodes("/students/student/name");for (Node node : nodes) {System.out.println(node.getText());//张三//李四}} }
-
selectSingleNode
:如果有多个,则只获取第一个public class Main {public static void main(String[] args) throws DocumentException {//1.创建解析器对象SAXReader saxReader = new SAXReader();//2.利用解析器去读取xml文件,并返回文档对象File file = new File("hello.xml");Document document = saxReader.read(file);//3.利用xpath方式快速检索List<Node> nodes = document.selectNodes("/students/student/name");for (Node node : nodes) {System.out.println(node.getText());//张三//李四}} }
public class Main {public static void main(String[] args) throws DocumentException {//1.创建解析器对象SAXReader saxReader = new SAXReader();//2.利用解析器去读取xml文件,并返回文档对象File file = new File("hello.xml");Document document = saxReader.read(file);//3.利用xpath方式快速检索//首先获取根节点Element rootElement = document.getRootElement();//从根节点这个相对路径获取下面的节点Node node = rootElement.selectSingleNode("./student/name");System.out.println(node.getText());//张三}
}
<?xml version="1.0" encoding="UTF-8" ?><students><!--第一个学生信息--><student id="1"><a><name>张三</name></a><age>23</age></student><!--第二个学生信息--><student id="2"><name>李四</name><age>24</age></student><name>哈哈</name></students>
public class Main {public static void main(String[] args) throws DocumentException {//1.创建解析器对象SAXReader saxReader = new SAXReader();//2.利用解析器去读取xml文件,并返回文档对象File file = new File("hello.xml");Document document = saxReader.read(file);//3.利用xpath方式快速检索List<Node> nodes = document.selectNodes("//name");for (Node node : nodes) {System.out.println(node.getText());//张三//李四//哈哈}List<Node> nodes1 = document.selectNodes("//student/name");for (Node node : nodes1) {System.out.println(node.getText());//李四}List<Node> nodes2 = document.selectNodes("//student//name");for (Node node : nodes2) {System.out.println(node.getText());//张三//李四}}
}
//@属性名
:查找的是属性//元素[@属性名]
:查找指定属性的标签
<?xml version="1.0" encoding="UTF-8" ?><students><!--第一个学生信息--><student id="1"><a><name>张三</name></a><age>23</age></student><!--第二个学生信息--><student id="2"><name>李四</name><age>24</age></student><name>哈哈</name></students>
public class Main {public static void main(String[] args) throws DocumentException {//1.创建解析器对象SAXReader saxReader = new SAXReader();//2.利用解析器去读取xml文件,并返回文档对象File file = new File("hello.xml");Document document = saxReader.read(file);//3.查属性List<Node> nodes = document.selectNodes("//@id");for (Node node : nodes) {System.out.println(node.getText());//1//2}List<Node> nodes1 = document.selectNodes("//student[@id]");System.out.println(nodes1.size());//2for (Node node : nodes1) {System.out.println(node.getName());//student//student}List<Node> nodes2 = document.selectNodes("//student[@id='1']");System.out.println(nodes2.size());//1for (Node node : nodes2) {System.out.println(node.getName());//student}}
}
相关文章:

day25-XML
1.xml 1.1概述【理解】 1.2语法规则【应用】 1.5DTD约束【理解】 1.6schema约束【理解】 1.4xml解析【应用】 概述 xml解析就是从xml中获取到数据 常见的解析思想 DOM(Document Object Model)文档对象模型:就是把文档的各个组成部分看做成对应的对象。 会把xml文件全部加载到…...

Mixly 开启WIFI AP UDP收发数据
一、开发环境 软件:Mixly 2.0在线版 硬件:ESP32-C3(立创实战派) 固件:ESP32C3 Generic(UART) 测试工工具:NetAssist V5.0.1 二、实现功能 ESP32开启WIFI AP,打印接入点IP地址,允许…...

OCR图片转Excel表格:没结构化的弊端
随着OCR技术的不断发展,将表格图片转为excel已不再是难题,但是,目前市面上的程序还大多处于仅能将图片表格转为普通的excel格式阶段,而不能将其结构化,这样就会产生许多的弊端,具体弊端如下: &l…...

查看所用数据库的版本
通过查询 SELECT VERSION();...

U盘感染病毒,不必急于扔掉!教你如何有效清除U盘中的病毒
U盘被感染了只能扔掉吗?随着信息时代的飞速发展,U盘已成为我们日常生活中不可或缺的存储设备。然而,在使用U盘的过程中,我们有时会遇到U盘被病毒感染的情况。面对这一问题,许多人可能会感到恐慌,甚至想要直…...

新手小白也能玩转跨境电商:从零到精通的操作流程
随着全球化的浪潮愈演愈烈,跨境电商已成为众多创业者和企业家的瞩目焦点。然而,对于初涉此领域的新手来说,从零开始构建跨境电商业务可能会面临诸多挑战。本文将为您梳理跨境电商运营的基本操作流程,并指引新手小白如何迈出坚实的…...

川北医学院与爱尔眼科医院集团签署战略合作协议共谋医学发展新篇章
为深入贯彻落实党的二十大精神,统筹校、企、医、政多方资源,服务“健康中国”战略,推动眼健康产业发展,打造国家及区域级眼科医学中心,2024年5月31日,川北医学院与爱尔眼科医院集团在成都举行战略合作协议签…...

利用映射算子打印菱形
文章目录 一、利用RDD完成(一)右半菱形(二)左半菱形(三)完整菱形(四)输出任意大菱形 二、利用Java完成(一)右半菱形(二)左半菱形&…...

亚信安全正式推出5G专网安全测试服务 圆满完成核电客户5G项目落地
近日,亚信安全联合北京触点互动信息技术有限公司成功完成某核电客户5G专网项目,从终端安全,基站,核心网网元,切片安全以及接口安全等重点存在安全风险点进行测试,发现潜藏的安全隐患漏洞,为客户…...

第二十五章CSS中的技巧(导航栏、下拉列表)
1.CSS精灵 1.什么是CSS精灵 英文叫法 CSS sprites,通常被解释为“CSS图像拼合”或“CSS贴图定位”;其实就是把网页中一些背景图片整合到一张图片文件中,再利用css“background-image”, “background-repeat”,“background-position”的组…...

大话设计模式解读01-简单工厂模式
本系列的文章,来介绍编程中的设计模式,介绍的内容主要为《大话设计模式》的读书笔记,并改用C语言来实现(书中使用的是.NET中的C#),本篇来学习第一章,介绍的设计模式是——简单工厂模式。 1 面向对象编程 …...
35python数据分析numpy基础之setdiff1d求两个数组的差集
1 python数据分析numpy基础之setdiff1d求两个数组的差集 python的numpy库的setdiff1d(x,y)函数,表示数组x与y的差,即在x且不在y中的元素,且进行去重排序。 用法 numpy.setdiff1d(ar1, ar2, assume_uniqueFalse)描述 numpy.setdiff1d(ar1,…...

JVM 指针压缩
运用java内存对齐填充,对java内存进行8字节划分,java对象指针映射到每个划分区域上,使得4个字节(32位)表示2^32个地址,从而使4个字节指针映射32G内存空间。 1.为什么进行指针压缩: jvm从32位变…...

时序预测 | Matlab灰色-马尔科夫预测
目录 预测效果基本介绍程序设计参考资料 预测效果 基本介绍 Matlab灰色-马尔科夫预测 灰色马尔科夫预测(Grey-Markov Prediction)是一种用于时间序列预测的方法,它结合了灰色系统理论和马尔科夫链模型。灰色系统理论是一种非参数化的预测方法…...

代码界的奥斯卡:SpringBoot测试的艺术与科学
探索SpringBoot测试的神秘世界,揭秘如何成为代码质量的守护神!从基础环境搭建到高级集成测试,本系列教程带你一步步构建坚不可摧的测试防线。深入JUnit 5的强大功能,学习如何用MockMvc和Testcontainers打造逼真的测试场景。准备好…...

安防监控视频平台LntonCVS视频监控汇聚平台遏制校园暴力保护校园学生安全应用方案
未成年人被誉为祖国的花朵,是我们国家的未来。然而,最近频繁曝出的未成年霸凌事件却引发了社会的广泛关注。这些事件手段残忍,事态恶劣,引发了全社会对如何保护未成年身心健康、规避霸凌事件发生的深刻思考。 为了更好地保障学生的…...
Python | 平均绩点
字符串的概念和特点 字符串既可以使用单引号,也可以使用双引号""来创建 可以使用运算符来拼接字符串,并返回字符串拼接后的结果。 first_name "Tom" last_name "Jerry" full_name first_name " " &quo…...

2024年有什么值得入手的5G长期套餐大流量卡推荐?大流量手机卡入手指南(超4款正规手机卡实测总结)
前言 24年有什么值得入手的5G大流量卡推荐?大流量手机卡入手指南(超4款正规手机卡实测总结) 四大运营商有哪些大流量卡,可电话,非物联网卡 所有卡激活后,均可以在官方app可查、 所有都是优惠长期 5G大流…...
《尚上优选》项目Bug记录
写在前面 本项目为该系列第二个项目,有一些问题如果没有在本文摘录,可以到 《云尚办公》项目 BUG记录 中查找是否有类似的解决方案。 (2024.3.24以下) (P11) 管理端前端node20版本启动报OpenSSL错误 经典问题,把we…...
Flutter 中的 PopupMenuTheme 小部件:全面指南
Flutter 中的 PopupMenuTheme 小部件:全面指南 Flutter 是一个由 Google 开发的跨平台 UI 框架,它允许开发者使用 Dart 语言构建美观、响应式的移动、Web 和桌面应用。Flutter 的 Material 组件库中包含了丰富的 UI 组件,其中 PopupMenuButt…...

MPNet:旋转机械轻量化故障诊断模型详解python代码复现
目录 一、问题背景与挑战 二、MPNet核心架构 2.1 多分支特征融合模块(MBFM) 2.2 残差注意力金字塔模块(RAPM) 2.2.1 空间金字塔注意力(SPA) 2.2.2 金字塔残差块(PRBlock) 2.3 分类器设计 三、关键技术突破 3.1 多尺度特征融合 3.2 轻量化设计策略 3.3 抗噪声…...

调用支付宝接口响应40004 SYSTEM_ERROR问题排查
在对接支付宝API的时候,遇到了一些问题,记录一下排查过程。 Body:{"datadigital_fincloud_generalsaas_face_certify_initialize_response":{"msg":"Business Failed","code":"40004","sub_msg…...

抖音增长新引擎:品融电商,一站式全案代运营领跑者
抖音增长新引擎:品融电商,一站式全案代运营领跑者 在抖音这个日活超7亿的流量汪洋中,品牌如何破浪前行?自建团队成本高、效果难控;碎片化运营又难成合力——这正是许多企业面临的增长困局。品融电商以「抖音全案代运营…...

页面渲染流程与性能优化
页面渲染流程与性能优化详解(完整版) 一、现代浏览器渲染流程(详细说明) 1. 构建DOM树 浏览器接收到HTML文档后,会逐步解析并构建DOM(Document Object Model)树。具体过程如下: (…...
如何为服务器生成TLS证书
TLS(Transport Layer Security)证书是确保网络通信安全的重要手段,它通过加密技术保护传输的数据不被窃听和篡改。在服务器上配置TLS证书,可以使用户通过HTTPS协议安全地访问您的网站。本文将详细介绍如何在服务器上生成一个TLS证…...
Java 加密常用的各种算法及其选择
在数字化时代,数据安全至关重要,Java 作为广泛应用的编程语言,提供了丰富的加密算法来保障数据的保密性、完整性和真实性。了解这些常用加密算法及其适用场景,有助于开发者在不同的业务需求中做出正确的选择。 一、对称加密算法…...

CVE-2020-17519源码分析与漏洞复现(Flink 任意文件读取)
漏洞概览 漏洞名称:Apache Flink REST API 任意文件读取漏洞CVE编号:CVE-2020-17519CVSS评分:7.5影响版本:Apache Flink 1.11.0、1.11.1、1.11.2修复版本:≥ 1.11.3 或 ≥ 1.12.0漏洞类型:路径遍历&#x…...

人机融合智能 | “人智交互”跨学科新领域
本文系统地提出基于“以人为中心AI(HCAI)”理念的人-人工智能交互(人智交互)这一跨学科新领域及框架,定义人智交互领域的理念、基本理论和关键问题、方法、开发流程和参与团队等,阐述提出人智交互新领域的意义。然后,提出人智交互研究的三种新范式取向以及它们的意义。最后,总结…...

基于IDIG-GAN的小样本电机轴承故障诊断
目录 🔍 核心问题 一、IDIG-GAN模型原理 1. 整体架构 2. 核心创新点 (1) 梯度归一化(Gradient Normalization) (2) 判别器梯度间隙正则化(Discriminator Gradient Gap Regularization) (3) 自注意力机制(Self-Attention) 3. 完整损失函数 二…...
C#学习第29天:表达式树(Expression Trees)
目录 什么是表达式树? 核心概念 1.表达式树的构建 2. 表达式树与Lambda表达式 3.解析和访问表达式树 4.动态条件查询 表达式树的优势 1.动态构建查询 2.LINQ 提供程序支持: 3.性能优化 4.元数据处理 5.代码转换和重写 适用场景 代码复杂性…...