Java 进阶day14XML Dom4j 工厂模式 Base64
目录
-
- 知识点1、XML
-
- 概念
- XML约束
- 知识点2、XML解析
-
- Dom4j(Dom for java)
- XPath
- 知识点3、工厂模式
- 知识点4、Base64
知识点1、XML
概念
XML的全称为(eXtensible Markup Language),是一种可扩展的标记语言。
XML的作用(保存数据)
不同软件之间进行数据传输。
各种框架的配置文件。
XML文件的后缀名为:xml
文档声明必须是XML第一行
version: 版本号,该属性是必须存在的
encoding: 文件编码,该属性不是必须的(一般取值都是UTF-8)
文档声明告诉别人这个一个XML文件
标签也称为元素
xml标签名字都是小写的
标签必须成对出现

特殊的标签可以不成对,但是必须有结束标记

标签中可以定义属性,属性和标签名空格隔开
属性值必须用引号引起来

在一个XML文档中,只允许有一个根标签
在XML中注释不能嵌套(Ctrl + / )


<?xml version="1.0" encoding="utf-8" ?>
<student><!-- 这是第一个学生--><name>小一</name><age>18</age><score>100</score><address/><note><![CDATA[<1>]]>2 < 3</note><!-- 这是第二个学生--><name>小二</name><age>20</age><score>99</score><address/><note><![CDATA[<2>]]></note></student>
XML约束
因为XML文件的标签和属性可以随意扩展,通过XML约束来限定XML文件中可使用的标签以及属性。
XML的两种约束
DTD约束,比较简单,功能相对弱
Schema,比较复杂,功能相对强
DTD约束


<!ELEMENT books (book+)>
<!ELEMENT book (name,price,author)>
<!ELEMENT name (#PCDATA)>
<!ELEMENT price (#PCDATA)>
<!ELEMENT author (#PCDATA)><?xml version="1.0" encoding="UTF-8" ?><!DOCTYPE books SYSTEM "book.dtd">
<books><book><name>Java</name><price>12</price><author>Au</author></book>
</books>
DTD的不足
不能验证数据类型 (比如,可以在price中写入“呵呵”,这是不正确的)
因为DTD是一个文本文件,本身不能验证是否正确。
Schema约束
Schema约束介绍
Schema约束文件扩展名(XML Schema Definition)
XML模式定义:xsd
Schema 功能更强大,数据类型约束更完善
Schema文件本身也是XML文件,所以也有根元素,根元素的名字叫:schema
一个XML中可以引用多个Schema约束文件
<根标签
xmlns=“命名空间”
xmlns:xsi=“http://www.w3.org/2001/XMLSchema-instance”
xsi:schemaLocation=“命名空间 schema约束文件名”>
< !-- 编写XML元素 -->
</根标签>

<?xml version="1.0" encoding="UTF-8" ?><书架xmlns="http://www.itcast.cn/"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://www.itcast.cn/ books.xsd"><!-- 编写XML元素 --><书><书名>Java</书名><作者>呵呵</作者><售价>88</售价></书>
</书架>
知识点2、XML解析
什么是XML的解析
使用程序读取XML中的数据
两种解析方式
Dom4j解析
XPath解析
Dom4j(Dom for java)



public class Contact {private String id;private boolean vip;private String name;private String gender;private String email;\默认无参、有参、getset
}<?xml version="1.0" encoding="UTF-8"?>
<contactList><contact id="1" vip="true"><name>潘金莲</name><gender>女</gender><email>panpan@itcast.cn</email></contact><contact id="2"><name>武松</name><gender id="1000">男</gender><email>wusong@itcast.cn</email></contact><contact id="3"><name>武大狼</name><gender>男</gender><email>wuda@itcast.cn</email></contact>
</contactList>
获取XML文件中的元素
public class Test {public static void main(String[] args) throws DocumentException {//1、创建解析器SAXReader reader = new SAXReader();//2、解析XMLDocument doc = reader.read("day14\src\Contact.xml");//3、获得根标签Element rootElement = doc.getRootElement();//4、创建集合保存元素ArrayList<Contact> list = new ArrayList<>();//5、获得所有子标签List<Element> elements = rootElement.elements();for (Element element : elements) {//6、获取数据String id = element.attributeValue("id");String vips = element.attributeValue("vip");boolean vip = Boolean.parseBoolean(vips);String name = element.elementText("name");String gender = element.elementText("gender");String email = element.elementText("email");// 7、创建对象Contact c = new Contact(id, vip, name, gender, email);// 8、保存数据list.add(c);}// 9、打印数据for (Contact c : list) {System.out.println(c);}}
}
XPath
需要导入两个包(XPath是对dom4j的加强)
导入jar包 ( dom4j 和 jaxen-1.1.2.jar )

绝对路径:/根元素/子元素/孙元素
相对路径:./子元素/孙元素 ( 注意:前面有个 . )
全文搜索
属性查找

public class Test2 {private static Document document;static{try {SAXReader reader = new SAXReader();document = reader.read("day14\src\Contact.xml");} catch (DocumentException e) {e.printStackTrace();}}public static void main(String[] args) {test1();System.out.println("----------------------");test2();test3();test4();}//绝对路径public static void test1(){List<Node> nodes = document.selectNodes("contactList/contact/name");for (Node node : nodes) {System.out.println( node.getName() + " : " + node.getText());}}//相对路径public static void test2(){Element rootElement = document.getRootElement();List<Node> nodes = rootElement.selectNodes("./contact/email");for (Node node : nodes) {System.out.println(node.getName() + " : " + node.getText());}}//全文搜索public static void test3(){List<Node> nodes = document.selectNodes("//contact/name");for (Node node : nodes) {System.out.println(node.getName());}}//属性查找public static void test4(){List<Node> nodes = document.selectNodes("//contact[@id = '1']");for (Node node : nodes) {System.out.println(node.getName());}}
}
注意:
1、xml文件一般放在src下
2、和所有写代码的路径不能有中文或空格
知识点3、工厂模式
简单工厂模式用于创建对象的。通过专门定义一个类来负责创建其他类的实例。
工厂模式作用
解决类与类之间的耦合问题,屏蔽了外界对具体类的依赖,让类的创建更加简单。
interface Car {void run();
}class Bmw implements Car{@Overridepublic void run() {System.out.println("Bmw");}
}class Benz implements Car{@Overridepublic void run() {System.out.println("Benz");}
}class Company {public static Car Creatcar(String car){if (car.equals("b1")){return new Benz();}if( car.equals("b2")){return new Bmw();}else {return null;}}
}public class Test {public static void main(String[] args) {Car b1 = Company.Creatcar("b1");b1.run();Car b2 = Company.Creatcar("b2");b2.run();}
}
知识点4、Base64
在Java 8中,Base64编码已经成为Java类库的标准。Java 8 内置了 Base64 编码的编码器和解码器。
编码: 文字变成特殊的64字符
解码: 特殊的64字符变成文字
基本的Base64: 输出被映射到一组字符A-Za-z0-9+/,编码不添加任何行标,输出的解码仅支持A-Za-z0-9+/。
URL的Base64: 输出映射到一组字符A-Za-z0-9-_,输出是URL和文件。
MIME的Base64: 输出映射到MIME友好格式。输出每行不超过76字符。(超过会换行)

相关文章:
Java 进阶day14XML Dom4j 工厂模式 Base64
目录 知识点1、XML 概念XML约束 知识点2、XML解析 Dom4j(Dom for java)XPath 知识点3、工厂模式知识点4、Base64 知识点1、XML 概念 XML的全称为(eXtensible Markup Language),是一种可扩展的标记语言。 XML的作用&…...
100.6 AI量化面试题:如何评估AI量化模型的过拟合风险?
目录 0. 承前1. 解题思路1.1 性能验证维度1.2 统计检验维度1.3 实践验证维度 2. 样本内外性能对比2.1 基础性能指标计算2.2 策略收益对比 3. 参数敏感性分析3.1 参数网格搜索3.2 稳定性评估 4. 白噪声测试4.1 随机数据测试 5. Deflated Sharpe Ratio5.1 DSR计算 6. 交易成本敏感…...
C++模板:泛型编程的魔法钥匙
前言 本篇博客将详细介绍C的模板 💖 个人主页:熬夜写代码的小蔡 🖥 文章专栏:C 若有问题 评论区见 🎉欢迎大家点赞👍收藏⭐文章 一:引言:为什么需要模板? 1.复杂代码…...
unordered_map/set的哈希封装
【C笔记】unordered_map/set的哈希封装 🔥个人主页:大白的编程日记 🔥专栏:C笔记 文章目录 【C笔记】unordered_map/set的哈希封装前言一. 源码及框架分析二.迭代器三.operator[]四.使用哈希表封装unordered_map/set后言 前言 哈…...
机器学习专业毕设选题推荐合集 人工智能
目录 前言 毕设选题 开题指导建议 更多精选选题 选题帮助 最后 前言 大家好,这里是海浪学长毕设专题! 大四是整个大学期间最忙碌的时光,一边要忙着准备考研、考公、考教资或者实习为毕业后面临的升学就业做准备,一边要为毕业设计耗费大量精力。学长给大家整理…...
软件工程导论三级项目报告--《软件工程》课程网站
《软件工程》课程网站 摘要 本文详细介绍了《软件工程》课程网站的设计与实现方案,包括可行性分析、需求分析、总体设计、详细设计、测试用例。首先,通过可行性分析从各方面确认了该工程的可实现性,接着需求分析明确了系统的目标用户群和功能…...
物联网领域的MQTT协议,优势和应用场景
MQTT(Message Queuing Telemetry Transport)作为轻量级发布/订阅协议,凭借其低带宽消耗、低功耗与高扩展性,已成为物联网通信的事实标准。其核心优势包括:基于TCP/IP的异步通信机制、支持QoS(服务质量&…...
缓存类为啥使用 unordered_map 而不是 map
性能考虑: std::unordered_map 是基于哈希表实现的,而 std::map 是基于红黑树实现的。对于查找操作,std::unordered_map 的平均查找时间复杂度是 O ( 1 ) O(1) O(1),而 std::map 的查找时间复杂度是 O ( l o g n ) O(log n) O(l…...
产品经理的人工智能课 02 - 自然语言处理
产品经理的人工智能课 02 - 自然语言处理 1 自然语言处理是什么2 一个 NLP 算法的例子——n-gram 模型3 预处理与重要概念3.1 分词 Token3.2 词向量化表示与 Word2Vec 4 与大语言模型的交互过程参考链接 大语言模型(Large Language Models, LLMs)是自然语…...
2024年MySQL 下载、安装及启动停止教程(非常详细),涉及命令行net start mysql80提示发生系统错误5的解决方案
一、安装包下载 官方网址: https://www.mysql.com/ MySQL 官方提供了两种不同的版本: 1.社区版本( MySQL Community Server ) :免费, 但MySQL 不提供任何技术支持 2.商业版本( MySQL Enterp…...
19.[前端开发]Day19-王者荣项目耀实战(二)
01_(掌握)王者荣耀-main-banner展示实现 完整代码 <!DOCTYPE html> <html lang"zh-CN"> <head><meta charset"UTF-8"><meta http-equiv"X-UA-Compatible" content"IEedge"><meta name"viewpor…...
lmk内存压力测试工具mem-pressure源码剖析
背景: android系统开发过程中,经常会遇到一些low memory kill的问题,在分析这些系统低内存导致被杀问题时候,经常因为不好复现而成为一个比较烦恼的阻碍。因为这种低内存问题本身就不属于一种功能操作类型的问题,属于…...
企业四要素如何用Java进行调用
一、什么是企业四要素? 企业四要素是在企业三要素(企业名称、统一社会信用代码、法定代表人姓名)的基础上,增加了一个关键要素,通常是企业注册号或企业银行账户信息。这种接口主要用于更全面的企业信息验证,…...
修剪二叉搜索树(力扣669)
这道题还是比较复杂,在递归上与之前写过的二叉树的题目都有所不同。如果当前递归到的子树的父节点不在范围中,我们根据节点数值的大小选择进行左递归还是右递归。为什么找到了不满足要求的节点之后,还要进行递归呢?因为该不满足要…...
一款由 .NET 官方团队开源的电子商务系统 - eShop
项目介绍 eShop是一款由.NET官方开源的,基于.NET Aspire构建的用于参考学习的服务架构电子商务系统,旨在展示如何利用.NET框架及其相关技术栈构建一个现代化的电子商务网站。该项目采用服务架构,将应用程序分解为多个独立的服务,…...
论最新技术编程类有什么,值得关注的点有什么呢?
在2025年的编程领域,新技术层出不穷。编程语言方面,Zig作为新一代系统级编程语言,凭借无隐藏控制流、出色的优化性能以及良好的C语言兼容性,被视作C语言强有力的替代者;Rust的应用范围不断拓展,在系统开发和Web后端开发中表现亮眼,其“零成本抽象”特性在保障内存安全的…...
Java入门进阶
文章目录 1、常用API 1.1、Math1.2、System1.3、Object1.4、Arrays1.5、基本类型包装类 1.5.1、基本类型包装类概述1.5.2、Integer1.5.3、int和String相互转换1.5.4、自动装箱和拆箱 1.6、日期类 1.6.1、Date类1.6.2、SimpleDateFormat类 1.6.2.1、格式化(从Date到…...
Java并发编程面试题:ThreadLocal(8题)
🧑 博主简介:CSDN博客专家,历代文学网(PC端可以访问:https://literature.sinhy.com/#/?__c1000,移动端可微信小程序搜索“历代文学”)总架构师,15年工作经验,精通Java编…...
Zabbix7.0安装(Ubuntu24.04+LNMP)
1.选择版本 下载Zabbix 2.安装虚拟机 这里选择在Ubuntu24.04上安装Zabbix. 安装链接https://blog.csdn.net/weixin_58189050/article/details/145446065 配置源 vim /etc/apt/sources.list deb https://mirrors.aliyun.com/ubuntu/ noble main restricted universe multive…...
从 0 到 1 构建数仓之DWD层
在企业数字化转型进程中,数据仓库的建设至关重要,而 DWD 层(明细粒度事实层)作为数据仓库的核心支撑层,其搭建质量直接影响企业数据的分析价值与决策效率。本文将结合实际案例与行业经验,详细阐述企业如何从…...
接口测试中缓存处理策略
在接口测试中,缓存处理策略是一个关键环节,直接影响测试结果的准确性和可靠性。合理的缓存处理策略能够确保测试环境的一致性,避免因缓存数据导致的测试偏差。以下是接口测试中常见的缓存处理策略及其详细说明: 一、缓存处理的核…...
css实现圆环展示百分比,根据值动态展示所占比例
代码如下 <view class""><view class"circle-chart"><view v-if"!!num" class"pie-item" :style"{background: conic-gradient(var(--one-color) 0%,#E9E6F1 ${num}%),}"></view><view v-else …...
(二)TensorRT-LLM | 模型导出(v0.20.0rc3)
0. 概述 上一节 对安装和使用有个基本介绍。根据这个 issue 的描述,后续 TensorRT-LLM 团队可能更专注于更新和维护 pytorch backend。但 tensorrt backend 作为先前一直开发的工作,其中包含了大量可以学习的地方。本文主要看看它导出模型的部分&#x…...
cf2117E
原题链接:https://codeforces.com/contest/2117/problem/E 题目背景: 给定两个数组a,b,可以执行多次以下操作:选择 i (1 < i < n - 1),并设置 或,也可以在执行上述操作前执行一次删除任意 和 。求…...
【OSG学习笔记】Day 16: 骨骼动画与蒙皮(osgAnimation)
骨骼动画基础 骨骼动画是 3D 计算机图形中常用的技术,它通过以下两个主要组件实现角色动画。 骨骼系统 (Skeleton):由层级结构的骨头组成,类似于人体骨骼蒙皮 (Mesh Skinning):将模型网格顶点绑定到骨骼上,使骨骼移动…...
让AI看见世界:MCP协议与服务器的工作原理
让AI看见世界:MCP协议与服务器的工作原理 MCP(Model Context Protocol)是一种创新的通信协议,旨在让大型语言模型能够安全、高效地与外部资源进行交互。在AI技术快速发展的今天,MCP正成为连接AI与现实世界的重要桥梁。…...
基于IDIG-GAN的小样本电机轴承故障诊断
目录 🔍 核心问题 一、IDIG-GAN模型原理 1. 整体架构 2. 核心创新点 (1) 梯度归一化(Gradient Normalization) (2) 判别器梯度间隙正则化(Discriminator Gradient Gap Regularization) (3) 自注意力机制(Self-Attention) 3. 完整损失函数 二…...
【学习笔记】erase 删除顺序迭代器后迭代器失效的解决方案
目录 使用 erase 返回值继续迭代使用索引进行遍历 我们知道类似 vector 的顺序迭代器被删除后,迭代器会失效,因为顺序迭代器在内存中是连续存储的,元素删除后,后续元素会前移。 但一些场景中,我们又需要在执行删除操作…...
Axure 下拉框联动
实现选省、选完省之后选对应省份下的市区...
在鸿蒙HarmonyOS 5中使用DevEco Studio实现指南针功能
指南针功能是许多位置服务应用的基础功能之一。下面我将详细介绍如何在HarmonyOS 5中使用DevEco Studio实现指南针功能。 1. 开发环境准备 确保已安装DevEco Studio 3.1或更高版本确保项目使用的是HarmonyOS 5.0 SDK在项目的module.json5中配置必要的权限 2. 权限配置 在mo…...
