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

22_解析XML配置文件_List列表

解析XML文件 需要先

1.【加载XML文件】

而 【加载XML】文件有两种方式

【第一种 —— 使用Unity资源系统加载文件】

TextAsset xml = Resources.Load<TextAsset>(filePath);

XmlDocument doc = new XmlDocument();

doc.LoadXml(xml.text);

【第二种 —— 在C#文件IO接口加载文件】

XmlDocument doc = new XmlDocument();

doc.Load(@"D:\Dec\info.xml");

2.【解析XML文件】 分三步

    (1)第一步 - 获取根节点下的所有子节点的List

XmlNodeList nodLst = doc.SelectSingleNode("root").ChildNodes;

    (2)第二步 - 将某一个节点转化为一个XmlElement

XmlElement ele = nodLst[i] as XmlElement;

    (3)从XmlElement里获取名称为"ID"的数据

string value = ele.GetAttributeNode("ID").InnerText;

注意:数据都是以字符串的形式存储 需要自己转化为对应的数据类型

因为 配置文件本身就是一种资源

所以在资源加载服务层ResSvc.cs解析使用

这里我们需要创建一个XML配置文件常量类来记录不同的XML文件的名称

编写脚本

//功能 : 路径常量宣言
public class PathDefine {public const string RDNameCfg = "ResCfgs/rdname";
}

其中路径名称要一致

在资源加载服务ResSvc.cs中填好加载的文件路径

如果XML文件可能加载失败时会导致程序崩溃 所以加一层判断

如果加载成功了那么 就解析这个文件

先创建一个XML文件 然后加载xml文件中的text信息 然后开始解析XML文件

其中这个root是配置文件中的头节点

获取了这个配置文件的子节点 就可以进行遍历 并获取ID号

因为获取的这个ID号可以判断这个配置文件加载是否成功

所以加一层判断

如果这个ID号不存在 后面就不需要读了就 跳过

接着如果拿到了这个ID号就遍历这个节点里面的属性

比如说拿到了ID = 1 的节点就遍历里面的属性

然后将定义三个姓氏、男名、女名列表 然后遍历ID号的属性 将这些属性分别存储到这三个列表中

using System;
using System.Collections.Generic;
using System.Xml;
using UnityEngine;
using UnityEngine.SceneManagement; //异步加载 命名空间
//功能 : 资源加载服务
public class ResSvc : MonoBehaviour{#region 单例模式public static ResSvc Instance = null;#endregionpublic void InitSvc(){#region 单例模式Instance = this;#endregion#region InitCfgs-XML配置文件InitRDNameCfg();#endregionDebug.Log("Init ResSvc...");}#region 【委托】更新回调 进度值Action prgCB = null;#endregion//自定义异步加载public void AsyncLoadScene(string sceneName,Action loaded) {#region 窗口基类的好处GameRoot.Instance.loadingWnd.SetWndState();#endregion//拿到异步操作AsyncOperation sceneAsync = SceneManager.LoadSceneAsync(sceneName);#region 【委托】更新回调 进度值//Lamd表达式prgCB = () =>{//当前加载进度float val = sceneAsync.progress;GameRoot.Instance.loadingWnd.SetProgress(val);if (val == 1){#region Loaded回调判断if (loaded != null)loaded();#endregion#region 单例调用打开登录窗口//LoginSys.Instance.OpenLoginWnd();#endregion//当进度满后 进度值 置空prgCB = null;sceneAsync = null;GameRoot.Instance.loadingWnd.gameObject.SetActive(false);}};#endregion}#region 【委托】更新回调 进度值void Update(){if(prgCB != null)prgCB();}#endregion#region 音乐播放资源_字典Dictionary<string,AudioClip> adDic = new Dictionary<string,AudioClip>();public AudioClip LoadAudio(string path, bool cache = false) {AudioClip au = null;//检查路径是否存在 需要对资源进行加载//out的作用是 如果路径已经存在这个资源 那么out直接就返回了if (!adDic.TryGetValue(path, out au)) {au = Resources.Load<AudioClip>(path);//检查是否需要缓存 避免重复加载if (cache) {adDic.Add(path, au);}}return au;}#endregion#region InitCfgs-XML配置文件#region 遍历属性 - 定义//存储姓氏的列表 定义List<string> surnameLst = new List<string>();//男人名字的列表 定义List<string> manLst = new List<string>();//女人名字的列表 定义List<string> womanLst = new List<string>();#endregionvoid InitRDNameCfg() {//1.加载XML文件TextAsset xml = Resources.Load<TextAsset>(PathDefine.RDNameCfg);if (!xml){Debug.LogError("xml file:" + PathDefine.RDNameCfg + "not exist");}else {//1.获取XML文件//创建XML配置文件XmlDocument doc = new XmlDocument();//加载获取xml文件的文本信息doc.LoadXml(xml.text);//2.解析XML文件 - (1)获取根节点下的所有子节点的ListXmlNodeList nodLst = doc.SelectSingleNode("root").ChildNodes;//遍历子节点for (int i = 0; i < nodLst.Count; i++){// - (2)将某一个节点转化为一个XmlElementXmlElement ele = nodLst[i] as XmlElement;if (ele.GetAttributeNode("ID") == null) {continue;}//获取ID号 - (3)从XmlElement里获取名称为"ID"的数据int ID = Convert.ToInt32(ele.GetAttributeNode("ID").InnerText);#region 遍历属性foreach (XmlElement e in nodLst[i].ChildNodes) {switch (e.Name) {case "surname"://增加值surnameLst.Add(e.InnerText);break;case "man"://增加值manLst.Add(e.InnerText);break;case "woman"://增加值womanLst.Add(e.InnerText);break;}}#endregion}}}#endregion
}

这样这个XML配置文件 就解析完成了

End.

相关文章:

22_解析XML配置文件_List列表

解析XML文件 需要先 1.【加载XML文件】 而 【加载XML】文件有两种方式 【第一种 —— 使用Unity资源系统加载文件】 TextAsset xml Resources.Load<TextAsset>(filePath); XmlDocument doc new XmlDocument(); doc.LoadXml(xml.text); 【第二种 —— 在C#文件IO…...

编译器gcc/g++ --【Linux基础开发工具】

文章目录 一、背景知识二、gcc编译选项1、预处理(进行宏替换)2、编译&#xff08;生成汇编&#xff09;3、汇编&#xff08;生成机器可识别代码&#xff09;4、链接&#xff08;生成可执行文件或库文件&#xff09; 三、动态链接和静态链接四、静态库和动态库1、动静态库2、编译…...

58.界面参数传递给Command C#例子 WPF例子

界面参数的传递&#xff0c;界面参数是如何从前台传送到后台的。 param 参数是从界面传递到命令的。这个过程通常涉及以下几个步骤&#xff1a; 数据绑定&#xff1a;界面元素&#xff08;如按钮&#xff09;的 Command 属性绑定到视图模型中的 RelayCommand 实例。同时&#x…...

games101-(5/6)

光栅化 投影完成之后&#xff0c;视图区域被确定在从[-1,1]的单位矩阵中&#xff0c;下一步就是光栅化 长宽比&#xff1a;ratio 垂直的可视角度&#xff1a;fild-of-view 可以看到的y 轴的范围&#xff0c;角度越小 越接近正交投影 屏幕坐标系 、 将多边形转化成像素 显示…...

人工智能在计算机视觉中的应用与创新发展研究

一、引言 1.1 研究背景与意义 1.1.1 研究背景 在当今数字化与智能化飞速发展的时代&#xff0c;人工智能已成为推动各领域变革的核心力量&#xff0c;而计算机视觉作为人工智能领域中极具活力与潜力的重要分支&#xff0c;正发挥着日益关键的作用。计算机视觉旨在赋予计算机…...

1-2 飞机大战游戏场景

前言&#xff1a; 根据前面的项目框架&#xff0c;搭建游戏的运行场景...... 1.0 框架预览 基于该框架首先实现游戏的运行场景 2.0 图片文件 创建图片文件&#xff0c;本次项目使用easyx作为图形库文件&#xff0c;在easyx中想要显示图片&#xff0c;需要有一张图片和图片的掩码…...

Mac Electron 应用签名(signature)和公证(notarization)

在MacOS 10.14.5之后&#xff0c;如果应用没有在苹果官方平台进行公证notarization(我们可以理解为安装包需要审核&#xff0c;来判断是否存在病毒)&#xff0c;那么就不能被安装。当然现在很多人的解决方案都是使用sudo spctl --master-disable&#xff0c;取消验证模式&#…...

Sklearn 中的逻辑回归

逻辑回归的数学模型 基本模型 逻辑回归主要用于处理二分类问题。二分类问题对于模型的输出包含 0 和 1&#xff0c;是一个不连续的值。分类问题的结果一般不能由线性函数求出。这里就需要一个特别的函数来求解&#xff0c;这里引入一个新的函数 Sigmoid 函数&#xff0c;也成…...

【阅读笔记】New Edge Diected Interpolation,NEDI算法,待续

一、概述 由Li等提出的新的边缘指导插值(New Edge—Di-ected Interpolation&#xff0c;NEDI)算法是一种具有良好边缘保持效果的新算法&#xff0c;它利用低分辨率图像与高分辨率图像的局部协方差问的几何对偶性来对高分辨率图像进行自适应插值。 2001年Xin Li和M.T. Orchard…...

编程题-最长的回文子串(中等)

题目&#xff1a; 给你一个字符串 s&#xff0c;找到 s 中最长的回文子串。 示例 1&#xff1a; 输入&#xff1a;s "babad" 输出&#xff1a;"bab" 解释&#xff1a;"aba" 同样是符合题意的答案。示例 2&#xff1a; 输入&#xff1a;s &…...

Versal - 基础3(AXI NoC 专题+仿真+QoS)

目录 1. 简介 2. 示例 2.1 示例说明 2.2 创建项目 2.2.1 平台信息 2.2.2 AXI NoC Automation 2.2.3 创建时钟和复位 2.3 配置 NoC 2.4 配置 AXI Traffic 2.5 配置 Memory Size 2.6 Validate BD 2.7 添加观察信号 2.8 运行仿真 2.9 查看结果 2.9.1 整体波形 2.9…...

知识库建设对提升团队协作与创新能力的影响分析

内容概要 在当今快速变革的商业环境中&#xff0c;知识库建设的重要性愈发凸显。它不仅是信息存储的载体&#xff0c;更是推动组织内部沟通与协作的基石。通过系统整理与管理企业知识&#xff0c;团队成员能够便捷地访问相关信息&#xff0c;使得协作过程更为流畅&#xff0c;…...

Java 实现Excel转HTML、或HTML转Excel

Excel是一种电子表格格式&#xff0c;广泛用于数据处理和分析&#xff0c;而HTM则是一种用于创建网页的标记语言。虽然两者在用途上存在差异&#xff0c;但有时我们需要将数据从一种格式转换为另一种格式&#xff0c;以便更好地利用和展示数据。本文将介绍如何通过 Java 实现 E…...

stack 和 queue容器的介绍和使用

1.stack的介绍 1.1stack容器的介绍 stack容器的基本特征和功能我们在数据结构篇就已经详细介绍了&#xff0c;还不了解的uu&#xff0c; 可以移步去看这篇博客哟&#xff1a; 数据结构-栈数据结构-队列 简单回顾一下&#xff0c;重要的概念其实就是后进先出&#xff0c;栈在…...

云计算与虚拟化技术讲解视频分享

互联网各领域资料分享专区(不定期更新)&#xff1a; Sheet 前言 由于内容较多&#xff0c;且不便于排版&#xff0c;为避免资源失效&#xff0c;请用手机点击链接进行保存&#xff0c;若链接生效请及时反馈&#xff0c;谢谢~ 正文 链接如下&#xff08;为避免资源失效&#x…...

python flask 使用 redis写一个例子

下面是一个使用Flask和Redis的简单例子&#xff1a; from flask import Flask from redis import Redisapp Flask(__name__) redis Redis(hostlocalhost, port6379)app.route(/) def hello():# 写入到Redisredis.set(name, Flask Redis Example)# 从Redis中读取数据name re…...

深入解析 Linux 内核内存管理核心:mm/memory.c

在 Linux 内核的众多组件中,内存管理模块是系统性能和稳定性的关键。mm/memory.c 文件作为内存管理的核心实现,承载着页面故障处理、页面表管理、内存区域映射与取消映射等重要功能。本文将深入探讨 mm/memory.c 的设计思想、关键机制以及其在内核中的作用,帮助读者更好地理…...

跟我学C++中级篇——64位的处理

一、计算机的发展 计算机从二进制为基础开始描述整个世界&#xff0c;但正如现实世界一样&#xff0c;十进制为主的世界也会有万千百概念。所以在实际的应用中&#xff0c;会出现32位和64位的计算机系统。当然&#xff0c;前面还有过16位、8位和4位等&#xff0c;以后还可以会…...

指针的介绍2后

1.二级指针 1.1二级指针的介绍 二级指针是指向指针的指针 #define _CRT_SECURE_NO_WARNINGS 1 #include <stdio.h>int main() {int a 100;int* pa &a;int** ppa &pa;printf("a %d\n", a);printf("&a(pa) %p\n", pa);prin…...

Linux 学习笔记__Day3

十八、设置虚拟机的静态IP 1、VMware的三种网络模式 安装VMware Workstation Pro之后&#xff0c;会在Windows系统中虚拟出两个虚拟网卡&#xff0c;如下&#xff1a; VMware提供了三种网络模式&#xff0c;分别是&#xff1a;桥接模式&#xff08;Bridged&#xff09;、NAT…...

Java结构化并发崩溃了?手把手教你用VirtualThread+StructuredTaskScope定位线程泄漏与作用域越界(附JDK21真机调试录屏)

第一章&#xff1a;Java结构化并发崩溃了&#xff1f;手把手教你用VirtualThreadStructuredTaskScope定位线程泄漏与作用域越界&#xff08;附JDK21真机调试录屏&#xff09;Java 21 正式引入结构化并发&#xff08;Structured Concurrency&#xff09;&#xff0c;其核心组件 …...

2026年Win11强力清理工具推荐:安全无广告的C盘瘦身软件怎么选?

我是个学生党&#xff0c;笔记本电脑的C盘从买回来就没清理过&#xff0c;最近装新游戏时直接提示空间不足。网上搜“Win11强力清理工具推荐”&#xff0c;跳出来一堆软件&#xff0c;看着都挺好&#xff0c;但又怕下载到带捆绑、弹广告的流氓软件。我只是想要一个能真正把C盘腾…...

5分钟快速上手:AsrTools智能语音转文字工具全攻略

5分钟快速上手&#xff1a;AsrTools智能语音转文字工具全攻略 【免费下载链接】AsrTools ✨ AsrTools: Smart Voice-to-Text Tool | Efficient Batch Processing | User-Friendly Interface | No GPU Required | Supports SRT/TXT Output | Turn your audio into accurate text…...

stealth.js全解析:40+反检测补丁的配置与优化技巧

Stealth.js全解析&#xff1a;40反检测补丁的配置与优化技巧 在当今的Web自动化领域&#xff0c;反检测技术已成为开发者必须掌握的核心技能之一。无论是数据采集、自动化测试还是其他需要模拟真实用户行为的场景&#xff0c;如何让脚本"隐形"都是决定成败的关键因素…...

突破资源封装壁垒:RePKG开源工具全维度应用指南

突破资源封装壁垒&#xff1a;RePKG开源工具全维度应用指南 【免费下载链接】repkg Wallpaper engine PKG extractor/TEX to image converter 项目地址: https://gitcode.com/gh_mirrors/re/repkg 问题&#xff1a;专用资源格式的困境与破局思路 如何突破专用格式的封锁…...

Zotero Citation插件开发指南:从环境适配到定制优化的全流程实践

Zotero Citation插件开发指南&#xff1a;从环境适配到定制优化的全流程实践 【免费下载链接】zotero-citation Make Zoteros citation in Word easier and clearer. 项目地址: https://gitcode.com/gh_mirrors/zo/zotero-citation 问题发现&#xff1a;学术写作中的引用…...

Java如何实现Excel表格中间插入列

在日常Excel数据处理中&#xff0c;通常需要调整表格结构&#xff0c;例如在特定列之间插入新列。本文将介绍如何有效地使用Java代码&#xff0c;特别是在现有的A列和B列之间插入新列。Excel文件的高效处理&#xff0c;避免直接操作二进制数据带来的复杂性和错误风险&#xff0…...

本地硬盘装系统神器更新!WinToHDD v7.0,支持加密/多分区安装

软件下载 夸克下载&#xff1a;https://pan.quark.cn/s/8bb2d79a1f4c迅雷下载&#xff1a;https://pan.xunlei.com/s/VOottCVsfGa3nDKv07YreMVPA1?pwdve85#UC下载&#xff1a;https://pan.xunlei.com/s/VOottCVsfGa3nDKv07YreMVPA1?pwdve85# 软件介绍 前几天一直看见有群友…...

告别手动截图!用Python脚本从ROS bag文件里精准提取带时间戳的图片(附完整代码)

告别手动截图&#xff01;用Python脚本从ROS bag文件里精准提取带时间戳的图片&#xff08;附完整代码&#xff09; 在计算机视觉和机器人研究中&#xff0c;从ROS bag文件中高效提取带时间戳的图像数据是构建数据集的关键步骤。传统方法依赖ROS自带工具&#xff0c;但常面临提…...

3D重建效率革命:从单张图片到高质量模型的全流程指南

3D重建效率革命&#xff1a;从单张图片到高质量模型的全流程指南 【免费下载链接】TripoSR 项目地址: https://gitcode.com/GitHub_Trending/tr/TripoSR 在数字内容创作领域&#xff0c;3D建模长期面临两大核心痛点&#xff1a;一方面&#xff0c;传统3D建模软件如Blen…...