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、解析XML
        Document 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{
    @Override
    public void run() {
        System.out.println("Bmw");
    }
}

class Benz implements Car{
    @Override
    public 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字符。(超过会换行)

在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

数据结构实验——排序算法的实现与分析

前言 到目前为止&#xff0c;8个数据结构实验在这里就全部更完啦&#xff08;撒花&#xff09;&#xff01;我那一段难忘的周二晚课时光也告一段落&#xff0c;整体来说&#xff0c;有赶课的折腾&#xff0c;有调错的崩溃&#xff0c;也有故意迟到五分钟的惬意&#xff0c;用G…

【Antv G2 5.x】饼图添加点击事件,获取当前坐标数据

// 监听 tooltip:show 事件this.chart.on(tooltip:show, (event) => {this.currentShowTooltipName = event.data.items[0].name})// 监听绘图区plot的点击事件this.chart.on(interval:click, ev => {this.$emit(chartClick, this.currentShowTooltipName);})// 监听绘图…

Oracle常用导元数据方法

1 说明 前两天领导发邮件要求导出O库一批表和索引的ddl语句做国产化测试&#xff0c;涉及6个系统&#xff0c;6千多张表&#xff0c;还好涉及的用户并不多&#xff0c;要不然很麻烦。 如此大费周折原因&#xff0c;是某国产库无法做元数据迁移。。。额&#xff0c;只能我手动导…

anolis os 8.9安装jenkins

一、系统版本 # cat /etc/anolis-release Anolis OS release 8.9 二、安装 # dnf install -y epel-release # wget -O /etc/yum.repos.d/jenkins.repo https://pkg.jenkins.io/redhat-stable/jenkins.repo # rpm --import https://pkg.jenkins.io/redhat-stable/jenkins.…

Python办公自动化之PDF

python版本&#xff1a;3.13.1 开发工具&#xff1a;pycharm 安装三方库&#xff1a;pypdf2 、pdfplumber、pymupdf 一、从PDF中提取文字 用Python从PDF中提取文字-CSDN博客 二、从PDF中提取表格 用Python从PDF中提取表格-CSDN博客 三、拆分和合并PDF文件 用Python拆…

变化检测相关论文可读list

一些用得上的&#xff1a; 遥感变化检测常见数据集https://github.com/rsdler/Remote-Sensing-Change-Detection-Dataset/ 代码解读&#xff1a;代码解读 | 极简代码遥感语义分割&#xff0c;结合GDAL从零实现&#xff0c;以U-Net和建筑物提取为例 NeurIPS2024: https://mp.w…

ASP.NET Core SignalR案例:导入英汉词典

Ecdict 下载词典文件stardict.7z&#xff0c;解压&#xff0c;stardict.csv是一个CSV格式的文本文件&#xff0c;文件的第一行是表头&#xff0c;除第一行外&#xff0c;其他每行文本是一个单词的相关信息&#xff0c;用逗号分隔的就是各个列的值。英汉词典ECDICT中导入单词到…

元宵佳节,我的创作纪念日:技术之路的回顾与展望

今天是元宵节&#xff0c;一个象征着团圆与美好的节日。巧合的是&#xff0c;今天也是我作为技术博客博主的创作纪念日。在这个特别的日子里&#xff0c;我想和大家分享我的创作故事&#xff0c;回顾初心、总结收获、展望未来&#xff0c;同时也希望能为正在技术道路上探索的你…

python实现常见数学概率分布

常见正态分布 1.贝塔分布1.1 概率密度函数1.2参数对分布形状的影响1.3 应用场景1.4 python实现 2. 帕累托分布&#xff08;80/20法则&#xff09;3. 正态分布&#xff08;高斯分布&#xff09;3.1 正态分布对应性质3.2 正态分布对应图像![在这里插入图片描述](https://i-blog.c…

本地生活案例列表案例

1.实现导航跳转 2.设置标题内容并创建编译模式 3.获取并且渲染商铺列表数据 获取数据 渲染页面 4.实现初步上拉加载效果 4.1配置loading效果 4.3配置上拉触底距离&#xff0c;并且使页码值自增加1&#xff0c;获取更多数据 节流处理 5.判断数据是否加载完毕 当没有后续数据了…

.NET版Word处理控件Aspose.Words教程:使用 C# 删除 Word 中的空白页

Word 文档中的空白页会使其看起来不专业并扰乱流程。用户会遇到需要删除 Word 中的空白页的情况&#xff0c;但手动删除它们需要时间和精力。在这篇博文中&#xff0c;我们将探讨如何使用 C# 删除 Word 中的空白页。 本文涵盖以下主题&#xff1a; C# 库用于删除 Word 中的空…

Unity崩溃后信息结合符号表来查看问题

目录 SO文件符号表对调试和分析的重要性调试方面分析方面 错误数据安装Logcat解释符号表设置符号文件路径生成解析 相关参考 SO文件 so 文件&#xff08;Shared Object File&#xff0c;共享目标文件&#xff09;和符号表紧密相关&#xff0c;它们在程序的运行、调试和分析过程…

mapbox进阶,添加绘图扩展插件,裁剪线

👨‍⚕️ 主页: gis分享者 👨‍⚕️ 感谢各位大佬 点赞👍 收藏⭐ 留言📝 加关注✅! 👨‍⚕️ 收录于专栏:mapbox 从入门到精通 文章目录 一、🍀前言1.1 ☘️mapboxgl.Map 地图对象1.2 ☘️mapboxgl.Map style属性1.3 ☘️MapboxDraw 绘图控件二、🍀添加绘图扩…

DeepSeek:从入门到精通

在人工智能飞速发展的今天&#xff0c;DeepSeek作为一款备受瞩目的AI工具&#xff0c;正以其强大的功能和开源理念改变着我们的生活和工作方式。本文将带你深入了解DeepSeek&#xff0c;从基础入门到进阶应用&#xff0c;助你快速掌握这一前沿工具。 文末有详细资料可下载 文末…

【清晰教程】通过Docker为本地DeepSeek-r1部署WebUI界面

【清晰教程】本地部署DeepSeek-r1模型-CSDN博客 目录 安装Docker 配置&检查 Open WebUI 部署Open WebUI 安装Docker 完成本地DeepSeek-r1的部署后【清晰教程】本地部署DeepSeek-r1模型-CSDN博客&#xff0c;通过Docker为本地DeepSeek-r1部署WebUI界面。 访问Docker官…

八、OSG学习笔记-

前一章节&#xff1a; 七、OSG学习笔记-碰撞检测-CSDN博客https://blog.csdn.net/weixin_36323170/article/details/145558132?spm1001.2014.3001.5501 一、了解OSG图元加载显示流程 本章节代码&#xff1a; OsgStudy/wids CuiQingCheng/OsgStudy - 码云 - 开源中国https:…

[笔记] 汇编杂记(持续更新)

文章目录 前言举例解释函数的序言函数的调用栈数据的传递 总结 前言 举例解释 // Type your code here, or load an example. int square(int num) {return num * num; }int sub(int num1, int num2) {return num1 - num2; }int add(int num1, int num2) {return num1 num2;…

在 Mac ARM 架构上使用 nvm 安装 Node.js 版本 16.20.2

文章目录 1. 安装 nvm&#xff08;如果还没有安装的话&#xff09;2. 加载 nvm 配置3. 列出特定系列的 Node.js 版本&#xff08;远程&#xff09;&#xff1a;4. 安装 Node.js 16.20.25. 使用指定版本的 Node.js6. 验证安装 在 Mac ARM 架构上使用 nvm 安装 Node.js 版本 16.…

物联网水质监测系统设计与实现/基于STM32的水产养殖云监控系统设计

背景 随着物联网技术的飞速发展&#xff0c;各行各业都在逐步实现智能化管理&#xff0c;水质监测系统作为环境监测中的一个重要环节&#xff0c;近年来备受关注。如何高效、精准地监测水质&#xff0c;尤其是在远程无法到达的地方&#xff0c;成为了一个迫切需要解决的问题。…

SAP Smartforms 货币和数量字段设置参考及格式,消息号是SSFCOMPOSER601

SAP Smartforms 货币和数量字段设置参考及格式&#xff0c;消息号是SSFCOMPOSER601 在开发SAP Smartforms 时&#xff0c;会遇到设置打印的货币字段或数量字段在打印预览时无法显示报错&#xff08;消息号是SSFCOMPOSER601&#xff0c;提示参考字段IS_DATA-GESME在表格中未知&…