当前位置: 首页 > news >正文

DOM4J解析.XML文件

<?xml version="1.0" encoding="utf-8" ?>
<books><book id="SN123123413241"><name>java编程思想</name><author>华仔</author><price>9.9</price></book><book id="SN12341235123"><name>葵花宝典</name><author>班长</author><price>5.5</price></book>
</books>

 实体类

package com;import java.math.BigDecimal;
import java.util.Objects;/*** @author hrui* @date 2023/10/20 16:39*/
public class Book {private String sn;private String name;private BigDecimal price;private String author;public Book() {}public Book(String sn, String name, BigDecimal price, String author) {this.sn = sn;this.name = name;this.price = price;this.author = author;}@Overridepublic String toString() {return "Book{" +"sn='" + sn + '\'' +", name='" + name + '\'' +", price=" + price +", author='" + author + '\'' +'}';}@Overridepublic boolean equals(Object o) {if (this == o) return true;if (o == null || getClass() != o.getClass()) return false;Book book = (Book) o;return Objects.equals(sn, book.sn) && Objects.equals(name, book.name) && Objects.equals(price, book.price) && Objects.equals(author, book.author);}@Overridepublic int hashCode() {return Objects.hash(sn, name, price, author);}public String getSn() {return sn;}public void setSn(String sn) {this.sn = sn;}public String getName() {return name;}public void setName(String name) {this.name = name;}public BigDecimal getPrice() {return price;}public void setPrice(BigDecimal price) {this.price = price;}public String getAuthor() {return author;}public void setAuthor(String author) {this.author = author;}
}
package com;import org.dom4j.Document;
import org.dom4j.DocumentException;
import org.dom4j.Element;
import org.dom4j.io.SAXReader;
import org.junit.Test;import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.List;/*** @author hrui* @date 2023/10/20 16:42*/
public class Dom4jTest {@Testpublic void test01(){//创建一个SaxReader输入流,去读取xl配置文件,生成Document对象SAXReader saxReader=new SAXReader();Document document= null;try {document = saxReader.read("src/books.xml");} catch ( Exception e) {e.printStackTrace();}System.out.println(document);}//读取books.xml文件生成Book类@Testpublic void test02() throws DocumentException {String projectRoot = System.getProperty("user.dir");System.out.println(projectRoot);//1.读取books.xml文件SAXReader saxReader=new SAXReader();Document document = saxReader.read("src/books.xml");//2.通过Document对象获取根元素Element rootElement = document.getRootElement();//3.通过根元素获取book标签对象List<Element> books = rootElement.elements("book");List<Book> bookList=new ArrayList<>();//4.遍历处理每个book标签转换为Book类for(Element e:books){//asXML()把标签对象转为标签字符串// System.out.println(e.asXML());Element name = e.element("name");//System.out.println(name.asXML());//getText()获取标签文本内容String nameText=name.getText();//elementText直接获取指定标签里的文本内容String priceText=e.elementText("price");String authorText=e.elementText("author");String sn=e.attributeValue("id");System.out.println(sn);Book book=new Book();book.setSn(sn);book.setAuthor(authorText);book.setName(nameText);book.setPrice(new BigDecimal(priceText));bookList.add(book);}System.out.println(bookList);}public static void main(String[] args) throws DocumentException {String projectRoot = System.getProperty("user.dir");System.out.println(projectRoot);//1.读取books.xml文件SAXReader saxReader=new SAXReader();Document document = saxReader.read("src/books.xml");//2.通过Document对象获取根元素Element rootElement = document.getRootElement();//3.通过根元素获取book标签对象List<Element> books = rootElement.elements("book");List<Book> bookList=new ArrayList<>();//4.遍历处理每个book标签转换为Book类for(Element e:books){//asXML()把标签对象转为标签字符串// System.out.println(e.asXML());Element name = e.element("name");//System.out.println(name.asXML());//getText()获取标签文本内容String nameText=name.getText();//elementText直接获取指定标签里的文本内容String priceText=e.elementText("price");String authorText=e.elementText("author");String sn=e.attributeValue("id");System.out.println(sn);Book book=new Book();book.setSn(sn);book.setAuthor(authorText);book.setName(nameText);book.setPrice(new BigDecimal(priceText));bookList.add(book);}System.out.println(bookList);}
}

上面@Test可以执行,main方法找不到文件的原因

这是因为在测试中,测试运行器可能会设置不同的当前工作目录(working directory)。

相关文章:

DOM4J解析.XML文件

<?xml version"1.0" encoding"utf-8" ?> <books><book id"SN123123413241"><name>java编程思想</name><author>华仔</author><price>9.9</price></book><book id"SN1234…...

黑豹程序员-架构师学习路线图-百科:MVC的演变终点SpringMVC

MVC发展史 在我们开发小型项目时&#xff0c;我们代码是混杂在一起的&#xff0c;术语称为紧耦合。 如最终写ASP、PHP。里面既包括服务器端代码&#xff0c;数据库操作的代码&#xff0c;又包括前端页面代码、HTML展现的代码、CSS美化的代码、JS交互的代码。可以看到早期编程就…...

二、BurpSuite Intruder暴力破解

一、介绍 解释&#xff1a; Burp Suite Intruder是一款功能强大的网络安全测试工具&#xff0c;它用于执行暴力破解攻击。它是Burp Suite套件的一部分&#xff0c;具有高度可定制的功能&#xff0c;能够自动化和批量化执行各种攻击&#xff0c;如密码破解、参数枚举和身份验证…...

solidworks 2024新功能之-让您的工作更加高效

您可以创建杰出的设计&#xff0c;并将这些杰出的设计将融入产品体验中。为了帮您简化和加快由概念到成品的产品开发流程&#xff0c;SOLIDWORKS 2024 涵盖全新的用户驱动型增强功能&#xff0c;致力于帮您实现更智能、更快速地与您的团队和外部合作伙伴协同工作。 SOLIDWORKS…...

华为eNSP配置专题-VRRP的配置

文章目录 华为eNSP配置专题-VRRP的配置0、参考文档1、前置环境1.1、宿主机1.2、eNSP模拟器 2、基本环境搭建2.1、基本终端构成和连接 2.VRRP的配置2.1、PC1的配置2.2、接入交换机acsw的配置2.3、核心交换机coresw1的配置2.4、核心交换机coresw2的配置2.5、配置VRRP2.6、配置出口…...

LuatOS-SOC接口文档(air780E)--lcd - lcd驱动模块

常量 常量 类型 解释 lcd.font_opposansm8 font 8号字体 lcd.font_unifont_t_symbols font 符号字体 lcd.font_open_iconic_weather_6x_t font 天气字体 lcd.font_opposansm10 font 10号字体 lcd.font_opposansm12 font 12号字体 lcd.font_opposansm16 font…...

敏捷是怎么提高工作效率的

敏捷管理是一门极力减少不必要工作量的艺术。 谷歌、亚马逊、苹果、微信、京东等全球 500 强企业都在用的管理方法&#xff0c;适用于各行各业&#xff0c;被盛赞为应获“管理学的诺贝尔奖”。 它专注于让员工不受种种杂事的羁绊&#xff0c;激发个体斗志&#xff0c;释放出巨大…...

【C++】哈希的应用 -- 布隆过滤器

文章目录 一、布隆过滤器提出二、布隆过滤器概念三、布隆过滤器哈希函数个数的选择四、布隆过滤器的实现1.布隆过滤器的插入2.布隆过滤器的查找3.布隆过滤器删除4.完整代码实现 五、布隆过滤器总结1.布隆过滤器优点2.布隆过滤器缺陷3.布隆过滤器的应用4.布隆过滤器相关面试题 一…...

如何在Git中修改远程仓库地址

原文&#xff08;可不登录复制代码&#xff09;&#xff1a;如何在Git中修改远程仓库地址-北的杂货间 Git是广泛使用的分布式版本控制系统&#xff0c;它允许开发者在本地仓库上工作&#xff0c;并将更改上传到远程仓库。然而&#xff0c;有时候你可能需要修改远程仓库的地址&…...

Go语言的sync.Once()函数

sync.Once 是 Go 语言标准库 sync 包提供的一个类型&#xff0c;它用于确保一个函数只会被执行一次&#xff0c;即使在多个 goroutine 中同时调用。 sync.Once 包含一个 Do 方法&#xff0c;其签名如下&#xff1a; func (o *Once) Do(f func()) Do 方法接受一个函数作为参数…...

修改 Stable Diffusion 使 api 接口增加模型参数

参考&#xff1a;https://zhuanlan.zhihu.com/p/644545784 1、修改 modules/api/models.py 中的 StableDiffusionTxt2ImgProcessingAPI 增加模型名称 StableDiffusionTxt2ImgProcessingAPI PydanticModelGenerator("StableDiffusionProcessingTxt2Img",StableDiff…...

微信小程序自定义组件及会议管理与个人中心界面搭建

一、自定义tabs组件 1.1 创建自定义组件 新建一个components文件夹 --> tabs文件夹 --> tabs文件 创建好之后win7 以上的系统会报个错误&#xff1a;提示代码分析错误&#xff0c;已经被其他模块引用&#xff0c;只需要在 在project.config.json文件里添加两行配置 &…...

UiPath:一家由生成式AI驱动的流程自动化软件公司

来源&#xff1a;猛兽财经 作者&#xff1a;猛兽财经 总结&#xff1a; &#xff08;1&#xff09;UiPath(PATH)的股价并没有因为生成式AI的炒作而上涨&#xff0c;但很可能会成为主要受益者。 &#xff08;2&#xff09;即使在严峻的宏观环境下&#xff0c;UiPath的收入还在不…...

使用AI编写测试用例——详细教程

随着今年chatGPT的大热&#xff0c;每个行业都试图从这项新技术当中获得一些收益我之前也写过一篇测试领域在AI技术中的探索&#xff1a;软件测试中的AI——运用AI编写测试用例现阶段AI还不能完全替代人工测试用例编写&#xff0c;但是如果把AI当做一个提高效率的工具&#xff…...

又哭又笑,这份面试宝典要是早遇到就好了

01、算法原理 选择排序(Selection sort)是一种简单直观的排序算法。 第一次从待排序的数据元素中选出最小&#xff08;或最大&#xff09;的一个元素&#xff0c;存放在序列的起始位置&#xff0c;然后再从剩余的未排序元素中寻找到最小&#xff08;大&#xff09;元素&#…...

订单30分钟自动关闭的五种解决方案

1 前言 在开发中&#xff0c;往往会遇到一些关于延时任务的需求。例如 生成订单30分钟未支付&#xff0c;则自动取消生成订单60秒后,给用户发短信 对上述的任务&#xff0c;我们给一个专业的名字来形容&#xff0c;那就是延时任务 。那么这里就会产生一个问题&#xff0c;这…...

【vSphere 8 自签名 VMCA 证书】企业 CA 签名证书替换 vSphere VMCA CA 证书Ⅰ—— 生成 CSR

目录 替换拓扑图证书关系示意图说明 & 关联博文1. 默认证书截图2. 使用 certificate-manager 生成CSR2.1 创建存放CSR的目录2.2 记录PNID和IP2.3 生成CSR2.4 验证CSR 参考资料 替换拓扑图 证书关系示意图 本系列博文要实现的拓扑是 说明 & 关联博文 因为使用企业 …...

【diffusion model】扩散模型入门

写在最前&#xff0c;参加DataWhale 10月组队学习。 参考资料&#xff1a; HuggingFace 开源diffusion-models-class 1.扩散模型介绍 2.调用模型生成一张赛博风格的猫咪图片 2.1 安装依赖包 %pip install -qq -U diffusers datasets transformers accelerate ftfy pyarrow9…...

[Spring]为什么Spring动态代理默认使用CGlib,而不是JDK代理?

文章目录 原因一&#xff1a;CGlib不需要接口原因二&#xff1a;CGlib效率高原因三&#xff1a;JDK代理会导致注解失效如果希望使用JDK代理扩展AOP in Spring Boot, is it a JDK dynamic proxy or a Cglib dynamic proxy?SpringSpringBoot 原因一&#xff1a;CGlib不需要接口 …...

最长上升子序列(二分)代码模板

用二分的思想求最长上升子序列的思想就是保持单调性&#xff0c;用一个q[]数组来作为一个单调数组。 每次将a[i]放进q数组中&#xff0c;但是要保持单调性&#xff0c;q数组的长度就是答案。 q[]数组中存的是所以以下标为长度的最长子序列的结尾的最小值。 理解q[]数组的意义…...

【WiFi帧结构】

文章目录 帧结构MAC头部管理帧 帧结构 Wi-Fi的帧分为三部分组成&#xff1a;MAC头部frame bodyFCS&#xff0c;其中MAC是固定格式的&#xff0c;frame body是可变长度。 MAC头部有frame control&#xff0c;duration&#xff0c;address1&#xff0c;address2&#xff0c;addre…...

可靠性+灵活性:电力载波技术在楼宇自控中的核心价值

可靠性灵活性&#xff1a;电力载波技术在楼宇自控中的核心价值 在智能楼宇的自动化控制中&#xff0c;电力载波技术&#xff08;PLC&#xff09;凭借其独特的优势&#xff0c;正成为构建高效、稳定、灵活系统的核心解决方案。它利用现有电力线路传输数据&#xff0c;无需额外布…...

STM32F4基本定时器使用和原理详解

STM32F4基本定时器使用和原理详解 前言如何确定定时器挂载在哪条时钟线上配置及使用方法参数配置PrescalerCounter ModeCounter Periodauto-reload preloadTrigger Event Selection 中断配置生成的代码及使用方法初始化代码基本定时器触发DCA或者ADC的代码讲解中断代码定时启动…...

【机器视觉】单目测距——运动结构恢复

ps&#xff1a;图是随便找的&#xff0c;为了凑个封面 前言 在前面对光流法进行进一步改进&#xff0c;希望将2D光流推广至3D场景流时&#xff0c;发现2D转3D过程中存在尺度歧义问题&#xff0c;需要补全摄像头拍摄图像中缺失的深度信息&#xff0c;否则解空间不收敛&#xf…...

在Ubuntu24上采用Wine打开SourceInsight

1. 安装wine sudo apt install wine 2. 安装32位库支持,SourceInsight是32位程序 sudo dpkg --add-architecture i386 sudo apt update sudo apt install wine32:i386 3. 验证安装 wine --version 4. 安装必要的字体和库(解决显示问题) sudo apt install fonts-wqy…...

LangChain知识库管理后端接口:数据库操作详解—— 构建本地知识库系统的基础《二》

这段 Python 代码是一个完整的 知识库数据库操作模块&#xff0c;用于对本地知识库系统中的知识库进行增删改查&#xff08;CRUD&#xff09;操作。它基于 SQLAlchemy ORM 框架 和一个自定义的装饰器 with_session 实现数据库会话管理。 &#x1f4d8; 一、整体功能概述 该模块…...

【Redis】笔记|第8节|大厂高并发缓存架构实战与优化

缓存架构 代码结构 代码详情 功能点&#xff1a; 多级缓存&#xff0c;先查本地缓存&#xff0c;再查Redis&#xff0c;最后才查数据库热点数据重建逻辑使用分布式锁&#xff0c;二次查询更新缓存采用读写锁提升性能采用Redis的发布订阅机制通知所有实例更新本地缓存适用读多…...

【Android】Android 开发 ADB 常用指令

查看当前连接的设备 adb devices 连接设备 adb connect 设备IP 断开已连接的设备 adb disconnect 设备IP 安装应用 adb install 安装包的路径 卸载应用 adb uninstall 应用包名 查看已安装的应用包名 adb shell pm list packages 查看已安装的第三方应用包名 adb shell pm list…...

Chromium 136 编译指南 Windows篇:depot_tools 配置与源码获取(二)

引言 工欲善其事&#xff0c;必先利其器。在完成了 Visual Studio 2022 和 Windows SDK 的安装后&#xff0c;我们即将接触到 Chromium 开发生态中最核心的工具——depot_tools。这个由 Google 精心打造的工具集&#xff0c;就像是连接开发者与 Chromium 庞大代码库的智能桥梁…...

django blank 与 null的区别

1.blank blank控制表单验证时是否允许字段为空 2.null null控制数据库层面是否为空 但是&#xff0c;要注意以下几点&#xff1a; Django的表单验证与null无关&#xff1a;null参数控制的是数据库层面字段是否可以为NULL&#xff0c;而blank参数控制的是Django表单验证时字…...