解析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线图实图&…...
【OSG学习笔记】Day 18: 碰撞检测与物理交互
物理引擎(Physics Engine) 物理引擎 是一种通过计算机模拟物理规律(如力学、碰撞、重力、流体动力学等)的软件工具或库。 它的核心目标是在虚拟环境中逼真地模拟物体的运动和交互,广泛应用于 游戏开发、动画制作、虚…...
从零实现富文本编辑器#5-编辑器选区模型的状态结构表达
先前我们总结了浏览器选区模型的交互策略,并且实现了基本的选区操作,还调研了自绘选区的实现。那么相对的,我们还需要设计编辑器的选区表达,也可以称为模型选区。编辑器中应用变更时的操作范围,就是以模型选区为基准来…...
什么是库存周转?如何用进销存系统提高库存周转率?
你可能听说过这样一句话: “利润不是赚出来的,是管出来的。” 尤其是在制造业、批发零售、电商这类“货堆成山”的行业,很多企业看着销售不错,账上却没钱、利润也不见了,一翻库存才发现: 一堆卖不动的旧货…...
CocosCreator 之 JavaScript/TypeScript和Java的相互交互
引擎版本: 3.8.1 语言: JavaScript/TypeScript、C、Java 环境:Window 参考:Java原生反射机制 您好,我是鹤九日! 回顾 在上篇文章中:CocosCreator Android项目接入UnityAds 广告SDK。 我们简单讲…...
VTK如何让部分单位不可见
最近遇到一个需求,需要让一个vtkDataSet中的部分单元不可见,查阅了一些资料大概有以下几种方式 1.通过颜色映射表来进行,是最正规的做法 vtkNew<vtkLookupTable> lut; //值为0不显示,主要是最后一个参数,透明度…...
智能仓储的未来:自动化、AI与数据分析如何重塑物流中心
当仓库学会“思考”,物流的终极形态正在诞生 想象这样的场景: 凌晨3点,某物流中心灯火通明却空无一人。AGV机器人集群根据实时订单动态规划路径;AI视觉系统在0.1秒内扫描包裹信息;数字孪生平台正模拟次日峰值流量压力…...
STM32HAL库USART源代码解析及应用
STM32HAL库USART源代码解析 前言STM32CubeIDE配置串口USART和UART的选择使用模式参数设置GPIO配置DMA配置中断配置硬件流控制使能生成代码解析和使用方法串口初始化__UART_HandleTypeDef结构体浅析HAL库代码实际使用方法使用轮询方式发送使用轮询方式接收使用中断方式发送使用中…...
宇树科技,改名了!
提到国内具身智能和机器人领域的代表企业,那宇树科技(Unitree)必须名列其榜。 最近,宇树科技的一项新变动消息在业界引发了不少关注和讨论,即: 宇树向其合作伙伴发布了一封公司名称变更函称,因…...
【把数组变成一棵树】有序数组秒变平衡BST,原来可以这么优雅!
【把数组变成一棵树】有序数组秒变平衡BST,原来可以这么优雅! 🌱 前言:一棵树的浪漫,从数组开始说起 程序员的世界里,数组是最常见的基本结构之一,几乎每种语言、每种算法都少不了它。可你有没有想过,一组看似“线性排列”的有序数组,竟然可以**“长”成一棵平衡的二…...
2025年低延迟业务DDoS防护全攻略:高可用架构与实战方案
一、延迟敏感行业面临的DDoS攻击新挑战 2025年,金融交易、实时竞技游戏、工业物联网等低延迟业务成为DDoS攻击的首要目标。攻击呈现三大特征: AI驱动的自适应攻击:攻击流量模拟真实用户行为,差异率低至0.5%,传统规则引…...
