DOM4J解析.XML文件

news2024/12/26 23:27:31
<?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;
    }

    @Override
    public String toString() {
        return "Book{" +
                "sn='" + sn + '\'' +
                ", name='" + name + '\'' +
                ", price=" + price +
                ", author='" + author + '\'' +
                '}';
    }

    @Override
    public 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);
    }

    @Override
    public 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 {

    @Test
    public 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类
    @Test
    public 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)。

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

发票识别神器推荐,告别繁琐手动录入,轻松管理财务

随着数字化时代的到来&#xff0c;越来越多的企业和个人开始寻求自动化处理各种繁琐任务的方式。其中&#xff0c;发票识别就是一个常见且具有挑战性的任务。发票识别是指将纸质或电子形式的发票转化为结构化的数据&#xff0c;以便进一步处理和分析。在过去&#xff0c;人工进…

【Qt QML】Qt Linguist使用方法

1. 简介 应用开发过程中&#xff0c;有时候需要翻译成多种语言&#xff0c;例如&#xff1a;将界面上所有中文翻译成英文&#xff0c;以适应国外市场。 针对多语言切换需求&#xff0c;Qt有一个Qt Linguist解决方案。 在所有需要翻译的字符串处使用qsTr()函数&#xff0c;Qt…

负采样:如何高效训练词向量

Negative Sampling 1.何为负采样 负采样是一种用于训练词嵌入模型的采样方法&#xff0c;特别适用于处理大规模词汇表的情况。负采样的目标是降低计算成本并改善模型的性能&#xff0c;同时有效地训练词向量。 2.为什么需要负采样 在传统的词嵌入模型中&#xff0c;如Word…

CleanMyMac X2024讲解及如何下载?

您是否曾经为Mac电脑的性能下降、存储空间不足而烦恼&#xff1f;是否希望有一个简单而高效的解决方案来优化您的Mac系统&#xff1f;那么&#xff0c;我向您介绍一款非常出色的工具&#xff1a;CleanMyMac X。它能够轻松处理这些问题&#xff0c;并让您的Mac恢复到最佳状态。 …

C++前缀和算法的应用:向下取整数对和 原理源码测试用例

本文涉及的基础知识点 C算法&#xff1a;前缀和、前缀乘积、前缀异或的原理、源码及测试用例 包括课程视频 题目 向下取整数对和 给你一个整数数组 nums &#xff0c;请你返回所有下标对 0 < i, j < nums.length 的 floor(nums[i] / nums[j]) 结果之和。由于答案可能会…

2023-10-17 LeetCode每日一题(倍数求和)

2023-10-17每日一题 一、题目编号 2652. 倍数求和二、题目链接 点击跳转到题目位置 三、题目描述 给你一个正整数 n &#xff0c;请你计算在 [1&#xff0c;n] 范围内能被 3、5、7 整除的所有整数之和。 返回一个整数&#xff0c;用于表示给定范围内所有满足约束条件的数…

深度学习推荐系统架构、Sparrow RecSys项目及深度学习基础知识

文章目录 &#x1f31f; 技术架构&#xff1a;深度学习推荐系统的经典技术架构长啥样&#xff1f;&#x1f34a; 一、深度学习推荐系统的技术架构&#x1f34a; 二、基于用户行为的推荐&#x1f34a; 三、基于多模态数据的推荐&#x1f34a; 四、基于知识图谱的推荐 &#x1f3…

CEC2023:基于自适应启动策略的混合交叉动态约束多目标优化算法(MC-DCMOEA)求解CEC2023(提供MATLAB代码及参考文献)

一、动态多目标优化问题 1.1问题定义 1.2 动态支配关系定义 二、 基于自适应启动策略的混合交叉动态多目标优化算法 基于自适应启动策略的混合交叉动态多目标优化算法&#xff08;Mixture Crossover Dynamic Constrained Multi-objective Evolutionary Algorithm Based on Se…

【Overload游戏引擎细节分析】Lambert材质Shader分析

一、经典光照模型&#xff1a;Phong模型 现实世界的光照是极其复杂的&#xff0c;而且会受到诸多因素的影响&#xff0c;这是以目前我们所拥有的处理能力无法模拟的。经典光照模型冯氏光照模型(Phong Lighting Model)通过单独计算光源成分得到综合光照效果&#xff0c;然后添加…

Modelsim无法生成LICENSE的问题

按照网上的破解教程&#xff0c;将mgls.dll和mgls64.dll属性都是去掉只读后&#xff0c;点击patch64_dll.bat文件生成LICENSE&#xff0c;发现在弹出的对话框中一直提示找不到其文件&#xff0c;无法正常生成LICENSE。 解决方法&#xff1a; 1.按winR键或者在电脑搜索界面中输…

C/C++ const相关 常量指针 常指针 常指针常量 顶层底层const

文章目录 前言const限定符初始化const引用指针和const顶层和底层const总结 前言 在看const相关内容的时候&#xff0c;对const的一些概念还存在部分疑惑&#xff0c;容易搞混&#xff0c;尤其是在变量声明这种情况下。 这篇博客就主要写一下const的相关。 const限定符 const主…

npm 无法将“npm”项识别为 cmdlet、函数、脚本文件或可运行程序的名称。请检查名称的拼写,如果包括路径,请确保路径正确,然后再试一次。

一、报错&#xff1a; npm : 无法将“npm”项识别为 cmdlet、函数、脚本文件或可运行程序的名称。请检查名称的拼写&#xff0c;如果包括路径&#xff0c;请确保路径正确&#xff0c; 然后再试一次。 所在位置 行:1 字符: 1npm init -y~~~ CategoryInfo : ObjectNotFo…

✔ ★【备战实习(面经+项目+算法)】 10.21学习时间表(总计学习时间:5h30min)(算法刷题:7道)

✔ ★【备战实习&#xff08;面经项目算法&#xff09;】 坚持完成每天必做如何找到好工作1. 科学的学习方法&#xff08;专注&#xff01;效率&#xff01;记忆&#xff01;心流&#xff01;&#xff09;2. 每天认真完成必做项&#xff0c;踏实学习技术 认真完成每天必做&…

模拟量开关量防抖算法(模拟量超限报警功能块)

模拟量信号的防抖,除了了可以采用延时方法。还可以采用死区过滤器实现,死区过滤器详细算法解读和完整源代码,请查看下面文章博客: PLC信号处理系列之死区滤波器(DeadZone)-CSDN博客(*死区滤波器*)ELSErValue:=rX;END_IF;博途PLC信号处理系列之限幅消抖滤波_RXXW_Dor的博…

ucos练习

文章目录 简单实验在开始任务中创建优先级不同的多个任务使用信号量进行同步 UCOS 硬件实现任务管理任务调度 zynq ucos 简单实验 在开始任务中创建优先级不同的多个任务 int main() {UCOSStartup(MainTask);return 0; }void MainTask (void *p_arg) {OS_ERR os_err;…

42905-2023 碳化硅外延层厚度的测试 红外反射法

1 范围 本文件描述了采用红外反射法测试碳化硅外延层厚度的方法。 本文件适用于 n 型掺杂浓度大于110⁸ cm⁻ 的碳化硅衬底上同质掺杂浓度小于110⁵ cm⁻ 的 同质碳化硅外延层厚度的测试&#xff0c;测试范围为3μm&#xff5e;200μm。 2 规范性引用文件 下列文件中的内容…

Go并发编程之一

一、前言 新年学新语言Go系列文章已经完结&#xff0c;用了最简单的例子去了解Go基础语法&#xff0c;但Go最牛B的是它对并发的友好支持&#xff0c;每一门语言都有它自己独特的优势&#xff0c;如Java适合大型工程化项目&#xff0c;Python适合做数据分析及运维脚本&#xff0…

我单方面宣布:腾讯云服务器优惠价格(双11特价)

2023腾讯云双十一服务器优惠价格表多少钱一年&#xff1f;轻量服务器2核2G3M、2核2G4M、2核4G5M、4核8G12M、8核16G18M、16核32G28M和云服务器CVM标准型S5实例优惠价格&#xff0c;腾讯云百科今年双11服务器价格会在当前的价格基础上享受个9折优惠&#xff0c;可领券 https://c…

42911-2023 碳纤维增强复合材料 密封压力容器加速吸湿和过饱和调节方法

1 范围 本文件描述了碳纤维增强复合材料加速吸湿和过饱和调节的方法&#xff0c;该方法在温度高于100 ℃但低 于试验材料玻璃化转变温度(T) 的饱和水蒸气密封压力容器中进行。 本文件适用于玻璃化转变温度大于150℃的热固性碳纤维增强复合材料。热塑性碳纤维增强复合 材料也…

YOLOV8目标检测——模型训练

文章目录 1下载yolov8&#xff08;[网址](https://github.com/ultralytics/ultralytics)&#xff09;2用pycharm打开文件3训练自己的YOLOV8数据集4run下运行完了之后没有best.pt文件5导出为onnx文件 本章内容主要解决如何训练自己的YOLOV8模型。 1下载yolov8&#xff08;网址&a…