Java 进阶day14XML Dom4j 工厂模式 Base64

目录
    • 知识点1、XML
      • 概念
      • XML约束
    • 知识点2、XML解析
      • Dom4j(Dom for java)
      • XPath
    • 知识点3、工厂模式
    • 知识点4、Base64
      qwqw

知识点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 &lt; 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字符。(超过会换行)

在这里插入图片描述

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

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

相关文章

软件测试面试题及答案解析,2025最新版

1、什么是兼容性测试?兼容性测试侧重哪些方面? 参考答案: 兼容测试主要是检查软件在不同的硬件平台、软件平台上是否可以正常的运行&#xff0c;即是通常说的软件的可移植性。 兼容的类型&#xff0c;如果细分的话&#xff0c;有平台的兼容&#xff0c;网络兼容&#xff0…

【云安全】云原生-K8S- kubeconfig 文件泄露

什么是 kubeconfig 文件&#xff1f; kubeconfig 文件是 Kubernetes 的配置文件&#xff0c;用于存储集群的访问凭证、API Server 的地址和认证信息&#xff0c;允许用户和 kubectl 等工具与 Kubernetes 集群进行交互。它通常包含多个集群的配置&#xff0c;支持通过上下文&am…

无人机遥感图像拼接及处理实践技术:生态环境监测、农业、林业等领域,结合图像拼接与处理技术,能够帮助我们更高效地进行地表空间要素的动态监测与分析

近年来&#xff0c;无人机技术在遥感领域的应用越来越广泛&#xff0c;尤其是在生态环境监测、农业、林业等领域&#xff0c;无人机遥感图像的处理与分析成为了科研和业务化工作中的重要环节。通过无人机获取的高分辨率影像数据&#xff0c;结合图像拼接与处理技术&#xff0c;…

网络工程师 (33)VLAN注册协议——GVRP协议

前言 VLAN注册协议——GVRP&#xff08;GARP VLAN Registration Protocol&#xff09;是一种用于在网络中动态管理VLAN成员关系的网络协议。 一、基本概念 GVRP是GARP&#xff08;Generic Attribute Registration Protocol&#xff0c;通用属性注册协议&#xff09;的一种具体应…

在实体机和wsl2中安装docker、使用GPU

正常使用docker和gpu&#xff0c;直接命令行安装dcoker和&#xff0c;nvidia-container-toolkit。区别在于&#xff0c;后者在于安装驱动已经cuda加速时存在系统上的差异。 1、安装gpu驱动 在实体机中&#xff0c;安装cuda加速包&#xff0c;我们直接安装 driver 和 cuda 即可…

使用stm32控制esp01s

title: 使用stm32控制esp01s date: 2025年2月9日 18:41:20 tags: 单片机模块使用 categories: stm32 description: 使用stm32控制esp01s连接WiFi查看内容等操作 前言 使用stm32f103控制esp01s是步入物联网的第一步&#xff0c;接下来的文章会详细讲解如何使用stm32控制esp01s…

PT8042 双触控双输出触摸 IC

1. 产品概述 PT8042 是一款电容式触摸控制 ASIC &#xff0c;支持双通道触摸输入和双路同步开关输出&#xff0c;可引脚配置 同步输出的有效电平。 PT8042 实现触摸同步开关控制。适用于雾化器、车载用品、电子玩具、 消费类电子产品等领域&#xff0c;具有低功耗、高抗…

【AI学习】DeepSeek-R1-Distill的意义和影响

在写完上一篇文章《DeepSeek为什么这么火爆&#xff1f;解密梁文锋的深谋远虑》后&#xff0c;又想到了一个新的问题。 在DeepSeek R1的技术报告中&#xff0c;还有这样一个技术&#xff1a;蒸馏赋予小模型推理能力。这项技术的意义和影响是什么&#xff1f; 先看看这个技术&…

qml ToolBar详解

1、概述 在 QML 中&#xff0c;ToolBar 是一种常用的 UI 组件&#xff0c;通常位于窗口的顶部或底部&#xff0c;用于提供一系列的操作按钮、菜单或其他交互元素。它可以帮助用户快速访问应用程序的常用功能&#xff0c;提高用户操作的便捷性。ToolBar 可以包含多个 ToolButto…

视频理解新篇章:Mamba模型的探索与应用

人工智能咨询培训老师叶梓 转载标明出处 想要掌握如何将大模型的力量发挥到极致吗&#xff1f;叶老师带您深入了解 Llama Factory —— 一款革命性的大模型微调工具&#xff08;限时免费&#xff09;。 1小时实战课程&#xff0c;您将学习到如何轻松上手并有效利用 Llama Facto…

Flutter项目试水

1基本介绍 本文章在构建您的第一个 Flutter 应用指导下进行实践 可作为项目实践的辅助参考资料 Flutter 是 Google 的界面工具包&#xff0c;用于通过单一代码库针对移动设备、Web 和桌面设备构建应用。在此 Codelab 中&#xff0c;您将构建以下 Flutter 应用。 该应用可以…

LVS作业

1、对比 LVS 负载均衡群集的 NAT 模式和 DR 模式&#xff0c;比较其各自的优势 。 NAT 模式 部署与管理优势 配置简易&#xff1a;在 NAT 模式中&#xff0c;负载均衡器主要承担网络地址转换的工作&#xff0c;只需配置简单的 NAT 规则&#xff0c;就能实现将外部请求合理地转…

从零开始手写Shell:详解命令行解释器的实现原理

Shell的本质认知 命令行解释器&#xff08;Shell&#xff09;是操作系统的"翻译官"&#xff0c;它的核心工作流程可以抽象为&#xff1a; 循环 {1. 显示提示符2. 获取命令输入3. 解析命令参数4. 执行命令程序 }本实现仅需200行C代码&#xff0c;却能完整展现Shell的…

mysql读写分离与proxysql的结合

上一篇文章介绍了mysql如何设置成主从复制模式&#xff0c;而主从复制的目的&#xff0c;是为了读写分离。 读写分离&#xff0c;拿spring boot项目来说&#xff0c;可以有2种方式&#xff1a; 1&#xff09;设置2个数据源&#xff0c;读和写分开使用 2&#xff09;使用中间件…

机器学习10-卷积和卷积核3

机器学习10-卷积和卷积核3 纹理表示卷积神经网络全链接神经网络的瓶颈卷积网络中的卷积操作特征响应图组尺寸计算 池化操作示例 图像增强翻转随机缩放抠图色彩抖动其他方案1. 平移2. 旋转3. 拉伸4. 径向畸变5. 裁剪 纹理表示 如何去表示纹理&#xff1f; 基于卷积核组的纹理表…

办公用品管理系统需求说明

办公用品管理系统需求说明 1. 系统概述 目标&#xff1a;实现办公用品的全生命周期管理&#xff08;采购→入库→领用→盘点→报废&#xff09;&#xff0c;提升物资使用效率&#xff0c;降低运营成本 用户角色&#xff1a; 普通员工部门管理员采购专员财务人员系统管理员 …

Shell-基本命令与运算符

1.为什么要进行shell编程? 在Linux系统中&#xff0c;虽然有各种各样的图形化接口工具&#xff0c;但是shell仍然是一个非常灵活的 工具。 Shell不仅仅是命令的收集&#xff0c;而且是一门非常棒的编程语言。 您可以通过使用shell使大量的任务自动化&#xff0c; 因此&#…

Spring基于文心一言API使用的大模型

有时做项目我们可能会遇到要在项目中对接AI大模型 本篇文章是对使用文心一言大模型的使用总结 前置任务 在百度智能云开放平台中注册成为开发者 百度智能云开放平台 进入百度智能云官网进行登录&#xff0c;点击立即体验 点击千帆大模型平台 向下滑动&#xff0c;进入到模型…

【工业安全】-CVE-2022-35555- Tenda W6路由器 命令注入漏洞

文章目录 1.漏洞描述 2.环境搭建 3.漏洞复现 4.漏洞分析 4.1&#xff1a;代码分析  4.2&#xff1a;流量分析 5.poc代码&#xff1a; 1.漏洞描述 漏洞编号&#xff1a;CVE-2022-35555 漏洞名称&#xff1a;Tenda W6 命令注入 威胁等级&#xff1a;高危 漏洞详情&#xff1…

xtuner微调internlm2-chat-1_8b--xtuner中文文档快速上手案例

xtuner微调internlm2-chat-1_8b–xtuner中文文档快速上手案例 设备&#xff1a;百度飞桨免费算力平台16GB显存 1. 安装库 conda conda create --name xtuner-env python3.10 -y conda activate xtuner-env将model的conda保存到本地防止丢失 conda env list #参考env在那个…