解析xml文件,获取需要的数据并写入txt文件中
=_= 话不多说!直接上代码!=_=
1、XmlUtil.java xml解析工具类
public class XmlUtil {private static String dicName = "";private static String dicValue = "";// 用于存储需要的数据private static List<Map<String, String>> paramlist = new ArrayList();/*** 找到所有xml文件,并进行解析* @param strPath 文件路径* @param name 检索的属性名称* @param value 检索的属性值* @throws Exception*/public static void refreshFileList(String strPath, String name, String value){// 设置需要检索的值dicName = name;dicValue = value;// 创建文件对象File dir = new File(strPath);File[] files = dir.listFiles();if (files == null) {return;}// 遍历当前目录下所有的文件和文件夹for (int i = 0; i < files.length; i++) {if (files[i].isDirectory()) { // 文件夹refreshFileList(files[i].getAbsolutePath(), name, value);} else { // 文件// 判断是否为xml文件if (files[i].getAbsoluteFile().getName().split("\\.")[1].equals("xml")) {// 解析xml文件parseFile(files[i].getAbsoluteFile());}}}}/*** 将xml文件解析成Document对象* @param filePath*/public static void parseFile(File filePath) {// 1.创建DocumentBuilderFactory对象DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();try {// 2.创建DocumentBuilder对象DocumentBuilder builder = factory.newDocumentBuilder();// 3.将xml文件解析成Document对象Document document = builder.parse(filePath);// 4.获取根节点 model:Model为标签名称NodeList sList = document.getElementsByTagName("model:Model");// 5.通过Element方式解析并获取使用字典的字段Map<String, String> parMap = element(sList);// 6.存入需要的数据if (!parMap.isEmpty()) {paramlist.add(parMap);}} catch (Exception e) {e.printStackTrace();}}/*** 用Element方式获取节点信息以及所有属性信息* @param list*/public static Map<String, String> element(NodeList list) {Map<String, String> parMap = new HashMap<>();for (int i = 0; i < list.getLength(); i++) {Element element = (Element) list.item(i);// 获取所有attribute标签NodeList attribute = element.getElementsByTagName("attribute");for (int j = 0; j < attribute.getLength(); j++) {// 判断是否有属性if (attribute.item(j).hasAttributes()) {Map<String, String> map = new HashMap<>();// 存在则获取所有的属性NamedNodeMap attributes = attribute.item(j).getAttributes();for (int k = 0; k < attributes.getLength(); k++) {// 属性名String nodeName = attributes.item(k).getNodeName();// 属性值String nodeValue = attributes.item(k).getNodeValue();// 拿到属性名称和属性值if ("name".equals(nodeName)) {map.put("name", nodeValue);}if ("value".equals(nodeName)) {map.put("value", nodeValue);}}// 判断是否使用的院系字典if (dicName.equals(map.get("name")) && dicValue.equals(map.get("value"))) {// 获取使用了字典的字段Node parentNode = attribute.item(j).getParentNode();if (parentNode.hasAttributes()) {// 所有的属性NamedNodeMap attributes1 = parentNode.getAttributes();for (int l = 0; l < attributes1.getLength(); l++) {parMap.put(attributes1.item(l).getNodeName(), attributes1.item(l).getNodeValue());}}// 文件路径存入parMap.put("url", parentNode.getOwnerDocument().getDocumentURI());}map.clear();}}}return parMap;}/*** 讲数据写入txt文件中* @param writePath 写入的路径* @throws Exception*/public void writeData(String writePath) throws Exception {// 拼接内容StringBuffer stringBuffer = new StringBuffer();paramlist.forEach(e -> {stringBuffer.append(e.get("url") + " ======= " + e.get("caption") + " ======= " + e.get("name") + "\n");});File file = new File(writePath);File parentFile = file.getParentFile();// 文件夹不存在,创建文件夹if (!parentFile.exists()) {parentFile.mkdirs();}// 创建文件file.createNewFile();FileOutputStream fileOutputStream = new FileOutputStream(file);BufferedWriter writer = new BufferedWriter(new OutputStreamWriter(fileOutputStream));// 写入数据writer.write(String.valueOf(stringBuffer));writer.close();System.out.println("文件写入完毕");}
}
2、测试代码
public static void main(String[] args) throws Exception {long a = System.currentTimeMillis();XmlUtil xmlUtil = new XmlUtil();// 设置需要检索的属性名和值xmlUtil.refreshFileList("D:\\my\\file_test", "dic", "d-b122-sad-2d3q-12");xmlUtil.writeData("D:\\my\\outfile\\file1.txt");System.out.println("消耗时长:" + (System.currentTimeMillis() - a));}
解析xml方式还有很多种,这只是其中一种,可以参考:Java XML解析 - 利用dom(org.w3c.dom)解析XML
相关文章:
解析xml文件,获取需要的数据并写入txt文件中
_ 话不多说!直接上代码!_ 1、XmlUtil.java xml解析工具类 public class XmlUtil {private static String dicName "";private static String dicValue "";// 用于存储需要的数据private static List<Map<String, Str…...
JavaScript基础 第三天
1.for循环 2.数组的基本使用和操作 3.数组排序 一.for循环 ① 语法:把声明起始值,循环条件,变量值写到一起,让人一目了然 for(变量起始值;终止条件;变量变化量) {// 循环体 }举例: for (let i 0; i < 100; i)…...
2.Redis部署到Windows服务器
1.下载安装包 Redis官网没有提供Windows的安装包,可以去gitHub或者网上去下载Redis的Windows安装包。 2.Redis部署到服务器 将Redis整个文件夹放到服务器的指令目录,然后进行修改Redis的配置文件 redis.windows.conf,修改里面的配置项 1.b…...
【修正-高斯拉普拉斯滤波器-用于平滑和去噪】基于修正高斯滤波拉普拉斯地震到达时间自动检测研究(Matlab代码实现)
💥💥💞💞欢迎来到本博客❤️❤️💥💥 🏆博主优势:🌞🌞🌞博客内容尽量做到思维缜密,逻辑清晰,为了方便读者。 ⛳️座右铭&a…...
Go语言基础: 有参函数Func、Map、Strings详细案例教程
目录标题 一、Variadic Functions1.Syntax2.Examples and understanding how variadic functions work3.Slice arguments vs Variadic arguments 仅改变可变参数4.Gotcha 二、Map1.Create a Map2.Retrieving value for a key from a map3.Checking if a key exists4.Iterate ov…...
JDBC连接数据库如何实现你会吗???
1.首先建立一个maven项目。。。详细过程来了哇 还没有安装maven的童鞋可以看这里:maven的下载安装与配置环境变量!!!(全网最详细)_明天更新的博客-CSDN博客 有很多小伙伴就有疑问啦,难道我直接…...
C#与C++交互(2)——ANSI、UTF8、Unicode文本编码
【前言】 我们知道计算机上只会存储二进制的数据,无论文本、图片、音频、视频等,当我们将其保存在计算机上时,都会被转成二进制的。我们打开查看的时候,二进制数据又被转成我们看得懂的信息。如何将计算机上的二进制数据转为我们…...
SQLSTATE[42000]: this is incompatible with sql_mode=only_full_group_by in
执行 SELECT *FROM test WHERE id>1 GROUP BY name having AVG(age)>10 ORDER BY id desc limit 1 提示错误 Fatal error: Uncaught PDOException: SQLSTATE[42000]: Syntax error or access violation: 1055 Expression #1 of SELECT list is not in GROUP BY clause…...
企业权限管理(五)-订单分页
订单分页查询 PageHelper介绍 PageHelper是国内非常优秀的一款开源的mybatis分页插件,它支持基本主流与常用的数据库,例如mysql、oracle、mariaDB、DB2、SQLite、Hsqldb等。 PageHelper使用 集成 引入分页插件有下面2种方式,推荐使用 Maven …...
Blender如何给fbx模型添加材质贴图并导出带有材质贴图的模型
推荐:使用 NSDT场景编辑器快速助你搭建可二次编辑的3D应用场景 此教程适合新手用户,专业人士直接可直接绕路。 本教程中介绍了利用Blender建模软件,只需要简单几步就可以为模型添加材质贴,图,并且导出带有材质的模型文…...
MySQL不走索引的情况分析
未建立索引 当数据表没有设计相关索引时,查询会扫描全表。 create table test_temp (test_id int auto_incrementprimary key,field_1 varchar(20) null,field_2 varchar(20) null,field_3 bigint null,create_date date null );expl…...
安装ubuntu22.04系统,配置国内源以及ssh远程登录
一、安装ubuntu22.04系统 原文连接:Ubuntu操作系统22.04版本安装教程-VMware虚拟机_wx63f86e949a470的技术博客_51CTO博客 1.点击界面左侧的开启此虚拟机,即可进入Ubuntu操作系统安装界面,点击Try or Install Ubuntu 即可开始安装 …...
win10 安装ubuntu子系统并安装宝塔
1、安装子系统 2、ubuntu 中安装宝塔 这里需要注意的: 大部分文章上写的是“面板账户登录信息”不能直接访问,要改成127.0.0.1:8888去访问。 这种情况适合“面板账户登录信息”端口就是8888。 想我的就是32757 这时你就要用 http://127.0.0…...
gazebo 导入从blender导出的dae等文件
背景: gazebo 模型库里的模型在我需要完成的任务中不够用,还是得从 solidworks、3DMax, blender这种建模软件里面在手动画一些,或者去他们的库里面在挖一挖。 目录 1 blender 1-1 blender 相关links 1-2 install 2 gazebo导入模型 2-1 g…...
目标检测YOLOv3基于DarkNet53模型测试-笔记
目标检测YOLOv3基于DarkNet53模型测试-笔记 预测和试测结果: 预测代码如下所示: testInsects.py #YOLOv3网模型测试-单图片文件测试并显示测试结果 import time import os import paddle import numpy as np import cv2 import random from PIL impor…...
Unity项目中查找所有使用某一张图片的材质球,再查找所有使用材质球的预设
废话少说,直接上代码。 using UnityEditor; using UnityEngine;public class FindDependencies : MonoBehaviour {static bool m_bIsSaveFile false;static TextWriteHelper m_szMaterialList new TextWriteHelper();static TextWriteHelper m_szPrefabList new…...
postman接口测试中文汉化教程
想必同学们对于接口测试工具postman的使用并不陌生,以及最近大为流行的国产工具apifox。对于使用过的同学来说,两者区别以及优缺点很容易别展示出来,postman相比apifox来说更加轻量,但是apifox更加符合国人的使用习惯....中国人给…...
java.lang.ClassNotFoundException: com.mysql.cj.jdbc.Driver的解决办法
springcloudAlibaba项目连接mysql时(mysql版本8.0.31,Springboot2.2.2,spring cloud Hoxton.SR1,spring cloud alibaba 2.1.0.RELEASE),驱动名称报红,配置如下: 原因:引入的jdbc驱动包和使用的m…...
认识所有权
专栏简介:本专栏作为Rust语言的入门级的文章,目的是为了分享关于Rust语言的编程技巧和知识。对于Rust语言,虽然历史没有C、和python历史悠远,但是它的优点可以说是非常的多,既继承了C运行速度,还拥有了Java…...
恒盛策略:怎样看k线图实图详解如何看懂k线图?
K线图是股票剖析中常用的一种图表,它能够反映一段时间内股票价格的变化状况,对于股票投资者来说非常重要。但是,由于k线图并不是很好理解,很多投资者并不知道怎样看懂它。那么,咱们就从多个视点来看看怎样看k线图实图&…...
PowerToys中文汉化终极指南:三步解锁Windows效率工具的全部潜力
PowerToys中文汉化终极指南:三步解锁Windows效率工具的全部潜力 【免费下载链接】PowerToys-CN PowerToys Simplified Chinese Translation 微软增强工具箱 自制汉化 项目地址: https://gitcode.com/gh_mirrors/po/PowerToys-CN 你是否曾因PowerToys的英文界…...
Petalinux 2020.1 QSPI启动踩坑记:手把手教你解决‘Bad data crc’和分区超限问题
Petalinux 2020.1 QSPI启动深度排障指南:从CRC校验到分区优化的完整实战 当ZynqMP平台遇上Petalinux 2020.1,QSPI FLASH启动往往会成为工程师的"噩梦现场"。那些看似简单的Bad data crc报错背后,隐藏着从Distro Boot机制到Flash物理…...
RK3588 Android12设备树定制:如何通过修改device配置,让你的开发板支持HDMI-IN和4G模块
RK3588 Android12硬件定制实战:从HDMI-IN到4G模块的完整适配指南 当一块RK3588核心板从开发套件变成实际产品时,最关键的环节莫过于硬件功能的定制化适配。我曾见证过一块原本只能播放视频的开发板,经过正确的设备树配置,最终蜕变…...
实例化管理化技术对象池与依赖注入
实例化管理化技术:对象池与依赖注入的实践智慧 在现代软件开发中,高效管理对象实例是提升性能与可维护性的关键。对象池(Object Pool)通过复用已创建的对象减少资源开销,而依赖注入(Dependency Injection,…...
机器学习-第二章 KNN算法
标题 第二章 KNN算法 目录 KNN算法简介 KNN思想、分类和回归问题处理流程 KNN算法API介绍 分类、回归实现 距离度量 常用距离计算方法 特征预处理 归一化 标准化 鸢尾花识别案例 超参数选择方法 交叉验证、网格搜索、手写数字识别 学习目标 1.理解k近邻算法的思想 2.知道k近邻算…...
基于Nanobot的智能写作助手:自媒体内容生成系统
基于Nanobot的智能写作助手:自媒体内容生成系统 1. 引言 每天清晨,自媒体创作者小王都要面对同样的挑战:找热点、写大纲、创作内容、排版发布。这个过程往往需要3-4个小时,而且质量参差不齐。直到他发现了一个解决方案——基于N…...
MySQL数据库教程
MySQL官方参考手册 数据库入门 数据库和表的基本操作 数据操作 单表查询 多表操作 索引 视图 事务 数据库编程 数据库管理与维护 数据库设计 数据库建模 The --host option (short form -h) tells the mysql client program the hostname or IP address of the MyS…...
GLIGEN核心架构解析:深入理解接地令牌化器的设计原理
GLIGEN核心架构解析:深入理解接地令牌化器的设计原理 【免费下载链接】GLIGEN Open-Set Grounded Text-to-Image Generation 项目地址: https://gitcode.com/gh_mirrors/gl/GLIGEN GLIGEN作为开源的Open-Set Grounded Text-to-Image Generation项目ÿ…...
Phi-mini-MoE-instruct轻量级MoE模型快速部署教程:3步完成Ubuntu环境搭建
Phi-mini-MoE-instruct轻量级MoE模型快速部署教程:3步完成Ubuntu环境搭建 1. 开篇:为什么选择Phi-mini-MoE-instruct 如果你正在寻找一个既轻量又强大的语言模型,Phi-mini-MoE-instruct绝对值得一试。这个基于混合专家(MoE)架构的模型&…...
airPLS算法突破性革新:无人干预的智能基线校正技术
airPLS算法突破性革新:无人干预的智能基线校正技术 【免费下载链接】airPLS baseline correction using adaptive iteratively reweighted Penalized Least Squares 项目地址: https://gitcode.com/gh_mirrors/ai/airPLS 在光谱分析、色谱检测和生物医学信号…...
