当前位置: 首页 > 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[]数组的意义…...

从零部署MinerU文档解析服务:GPU加速、防OOM配置与Docker打包全攻略

从零部署MinerU文档解析服务&#xff1a;GPU加速、防OOM配置与Docker打包全攻略 在AI模型服务化的浪潮中&#xff0c;文档解析作为企业数字化转型的关键环节&#xff0c;正经历着从实验室Demo到生产级服务的蜕变。MinerU-OpenAPI以其多模态处理能力和工业级稳定性&#xff0c;成…...

SAP预留与锁料功能深度对比:如何选择最适合你的物料控制方案

SAP预留与锁料功能深度对比&#xff1a;如何选择最适合你的物料控制方案 物料管理是制造业企业运营的核心环节之一。在SAP系统中&#xff0c;预留(Reservation)和锁料(Material Blocking)是两种常用的物料控制机制&#xff0c;它们都能确保关键物料在需要时可用&#xff0c;但实…...

从零精通Ultimaker Cura:3D打印切片软件实战配置指南

从零精通Ultimaker Cura&#xff1a;3D打印切片软件实战配置指南 【免费下载链接】Cura 3D printer / slicing GUI built on top of the Uranium framework 项目地址: https://gitcode.com/gh_mirrors/cu/Cura Ultimaker Cura作为全球领先的开源3D打印切片软件&#xff…...

还在用Excel手动贴标签?试试用C#调用CodeSoft 6的ActiveX组件,5分钟搞定批量打印

告别Excel手工标签&#xff1a;用C#与CodeSoft 6打造智能打印系统 仓库管理员小李每天上班第一件事&#xff0c;就是打开Excel表格核对上百个资产编号&#xff0c;然后逐个复制粘贴到标签模板中打印。上周因为手误把两个贵重设备的标签贴反&#xff0c;导致盘点时花了整整两天时…...

别再让用户干等了!Spring Boot + SSE 手把手实现大模型流式对话(附完整前后端代码)

Spring Boot SSE 实战&#xff1a;构建大模型流式对话系统的完整指南 想象一下这样的场景&#xff1a;用户在你的知识库系统中输入问题&#xff0c;等待答案时盯着空白的屏幕&#xff0c;手指无意识地敲击桌面。五秒、十秒过去了&#xff0c;页面依然一片空白。这种等待体验在…...

手把手教你用GEC6818开发板+RFID模块,从零搭建一个公交刷卡终端(附完整源码与避坑指南)

从零构建公交刷卡终端&#xff1a;GEC6818开发板与RFID模块实战指南 在嵌入式系统开发领域&#xff0c;GEC6818开发板因其强大的性能和丰富的接口资源&#xff0c;成为众多开发者实践项目的首选平台。本文将带领读者从硬件搭建到软件实现&#xff0c;完整构建一个功能完善的公…...

终极英雄联盟回放播放器:ROFL-Player完全使用指南

终极英雄联盟回放播放器&#xff1a;ROFL-Player完全使用指南 【免费下载链接】ROFL-Player (No longer supported) One stop shop utility for viewing League of Legends replays! 项目地址: https://gitcode.com/gh_mirrors/ro/ROFL-Player 还在为无法播放旧版本英雄…...

学术专著写作救星!AI专著撰写工具,快速打造专业大作

学术专著的主要价值在于其内容的系统性和逻辑性&#xff0c;然而这也是写作过程中最难克服的障碍。与期刊论文单一问题的探讨不同&#xff0c;专著需要构建一个完整的框架&#xff0c;从绪论到理论基础&#xff0c;再到核心研究、应用拓展及结论&#xff0c;各个章节应当层层递…...

终极指南:如何免费绕过iOS 15-16激活锁的完整教程

终极指南&#xff1a;如何免费绕过iOS 15-16激活锁的完整教程 【免费下载链接】applera1n icloud bypass for ios 15-16 项目地址: https://gitcode.com/gh_mirrors/ap/applera1n AppleRa1n是一款专为iOS 15-16系统设计的iCloud激活锁绕过工具&#xff0c;帮助用户解决因…...

终极游戏乱码修复方案:Locale Remulator完全指南

终极游戏乱码修复方案&#xff1a;Locale Remulator完全指南 【免费下载链接】Locale_Remulator System Region and Language Simulator. 项目地址: https://gitcode.com/gh_mirrors/lo/Locale_Remulator 还在为日韩游戏乱码而烦恼吗&#xff1f;Locale Remulator是一款…...