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.

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

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

相关文章

[JavaScript] ES6及以后版本的新特性

文章目录 箭头函数&#xff08;Arrow Functions&#xff09;为什么需要箭头函数&#xff1f;箭头函数的完整语法箭头函数中的 this实用场景 解构赋值&#xff08;Destructuring Assignment&#xff09;为什么需要解构赋值&#xff1f;数组解构赋值的完整用法对象解构赋值的完整…

C语言进阶——3字符函数和字符串函数(2)

8 strsrt char * strstr ( const char *str1, const char * str2);查找子字符串 返回指向 str1 中第一次出现的 str2 的指针&#xff0c;如果 str2 不是 str1 的一部分&#xff0c;则返回 null 指针。匹配过程不包括终止 null 字符&#xff0c;但会在此处停止。 8.1 库函数s…

C语言小项目——通讯录

功能介绍&#xff1a; 1.联系人信息&#xff1a;姓名年龄性别地址电话 2.通讯录中可以存放100个人的信息 3.功能&#xff1a; 1>增加联系人 2>删除指定联系人 3>查找指定联系人的信息 4>修改指定联系人的信息 5显示所有联系人的信息 6>排序&#xff08;名字&…

“深入浅出”系列之算法篇:(2)openCV、openMV、openGL

OpenCV是一个的跨平台计算机视觉库,可以运行在Linux囚、Windows 和Mac OS操作系统上。它轻量级而且高效,由一系列 C函数和少量C类构成&#xff0c;同时也提供了Python 接口&#xff0c;实现了图像处理和计算机视觉方面的很多通用算法。 OpenMV是一个开源&#xff0c;低成本&am…

ThinkPHP 8请求处理-获取请求对象与请求上下文

【图书介绍】《ThinkPHP 8高效构建Web应用》-CSDN博客 《2025新书 ThinkPHP 8高效构建Web应用 编程与应用开发丛书 夏磊 清华大学出版社教材书籍 9787302678236 ThinkPHP 8高效构建Web应用》【摘要 书评 试读】- 京东图书 使用Composer初始化ThinkPHP 8应用_thinkphp8 compos…

飞行器半实物联合仿真:技术解析与应用实践

1.背景介绍 当前&#xff0c;飞行器已成为大国博弈复杂场景中的重要角色&#xff0c;其技术经过多次实践不断发展&#xff0c;性能持续提升&#xff0c;整体效能显著增强。随着计算机技术和系统仿真技术的发展&#xff0c;利用计算机模拟和仿真构造一个虚拟飞行器的飞行控制系…

c#配置config文件

1&#xff0c;引用命名空间 Configuration 及配置信息

【机器学习】机器学习引领数学难题攻克:迈向未知数学领域的新突破

我的个人主页 我的领域&#xff1a;人工智能篇&#xff0c;希望能帮助到大家&#xff01;&#xff01;&#xff01;&#x1f44d;点赞 收藏❤ 一、引言 在数学的浩瀚领域中&#xff0c;存在着诸多长期未解的难题&#xff0c;这些难题犹如高耸的山峰&#xff0c;吸引着无数数…

OS Copilot功能测评:智能助手的炫彩魔法

简介&#xff1a; OS Copilot 是一款融合了人工智能技术的智能助手&#xff0c;专为Linux系统设计&#xff0c;旨在提升系统管理和运维效率。本文详细介绍了在阿里云ECS实例上安装和体验OS Copilot的过程&#xff0c;重点评测了其三个核心参数&#xff1a;-t&#xff08;模式…

JavaScript学习记录23

第十一节 JSON对象 1. JSON 格式 JSON 格式&#xff08;JavaScript Object Notation 的缩写&#xff09;是一种用于数据交换的文本格式&#xff0c;2001年由 Douglas Crockford 提出&#xff0c;目的是取代繁琐笨重的 XML 格式。 相比 XML 格式&#xff0c;JSON 格式有两个显…

C#设置winform窗体自动适应不同分辨率的电脑

C#设置winform窗体自动适应不同分辨率的电脑 文章已被社区收录 加入社区 问题背景&#xff1a; 用winform开发了一个上位机软件&#xff0c;本机的台式开发电脑是宽屏的&#xff0c;上位机软件的显示效果良好&#xff0c;而在笔记本电脑上使用上位机软件时&#xff0c;出现了界…

计算机网络 (55)流失存储音频/视频

一、定义与特点 定义&#xff1a;流式存储音频/视频是指经过压缩并存储在服务器上的多媒体文件&#xff0c;客户端可以通过互联网边下载边播放这些文件&#xff0c;也称为音频/视频点播。 特点&#xff1a; 边下载边播放&#xff1a;用户无需等待整个文件下载完成即可开始播放…

Oracle存储过程语法详解

简介 存储过程是一系列SQL语句的集合&#xff0c;可以封装复杂的逻辑&#xff0c;实现特定的功能&#xff0c;可以提高执行速度和代码的复用性&#xff0c;预先编译后存储在数据库中&#xff0c;可以通过指定存储过程的名称对其进行调用。 本文主要讲解Oracle存储过程语法&am…

kafka-保姆级配置说明(broker)

一. important ##broker ID&#xff0c;cluster唯一标识&#xff0c;数字类型 ##此值可以不指定&#xff0c;有集群自动创建&#xff08;由当前集群现有的brokerID 1&#xff09;。 ##默认值为-1 broker.id5 #broker.id.generation.enabletrue ##zookeeper连接地址 zookeeper.…

推箱子游戏

java小游戏2 一游戏介绍 二图像准备 墙、箱子、人、箱子目的地&#xff0c;人左边、人右边、人上边、人下边 三结构准备 地图是什么&#xff0c;我们把地图想象成一个网格&#xff0c;每个格子就是工人每次移动的步长&#xff0c;也是箱子移动的距离&#xff0c;设置一个二维数…

如何分辨ddos攻击和cc攻击?

DDoS&#xff08;分布式拒绝服务&#xff09;攻击和 CC&#xff08;Challenge Collapsar&#xff09;攻击都属于网络攻击手段&#xff0c;主要通过消耗目标服务器资源使其无法正常提供服务&#xff0c;但它们在攻击原理、攻击特征等方面存在区别&#xff1a; 攻击原理 DDoS 攻…

期权帮|如何利用股指期货进行对冲套利?

锦鲤三三每日分享期权知识&#xff0c;帮助期权新手及时有效地掌握即市趋势与新资讯&#xff01; 如何利用股指期货进行对冲套利&#xff1f; 对冲就是通过股指期货来平衡投资组合的风险。它分为正向与反向两种策略&#xff1a; &#xff08;1&#xff09;正向对冲&#xff…

软件质量与测试报告5-压力测试 JMeter 与 Badboy

A&#xff0e;百度搜索引擎压力测试 通过在Badboy下执行如下的测试场景来生成压力测试的脚本&#xff1a; a) 在Badboy的地址栏里面输入www.baidu.com&#xff0c;回车&#xff1b; b) 在右下区域打开的百度的主页上输入搜索关键字JMeter&#xff0c;回车&#xff1b; c) 在…

每日一题 417. 太平洋大西洋水流问题

417. 太平洋大西洋水流问题 代码使用队列进行广度搜索&#xff0c;分别遍历太平洋 和大西洋的河流&#xff0c;取交集。 class Solution { public:vector<vector<int>> pacificAtlantic(vector<vector<int>>& heights) {set<pair<int,int&…

Java设计模式 九 桥接模式 (Bridge Pattern)

桥接模式 (Bridge Pattern) 桥接模式是一种结构型设计模式&#xff0c;它的核心思想是将抽象部分与实现部分分离&#xff0c;使它们可以独立变化。这种模式通过组合而不是继承的方式来扩展功能&#xff0c;从而减少类之间的耦合度。 1. 模式结构 桥接模式的结构包括以下角色&…