Unity XML2——C#读写XML

这篇具有很好参考价值的文章主要介绍了Unity XML2——C#读写XML。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

一、XML 文件的存放位置

(一)只读不写的 XML

​ 放在 Resouces 或者 StreamingAssets 文件夹下,详见 Unity基础3——Resources资源动态加载_weixin_53163894的博客-CSDN博客。

(二)动态存储的 XML

​ 放在 Application.persistentDataPath 路径下

二、C# 读取 XML

​ C# 读取 XML 的方法有几种

  1. XmlDocument (把数据加载到内存中,方便读取)

  2. XmlTextReader (以流形式加载,内存占用更少,但是是单向只读,使用不是特别方便,除非有特殊需求,否则不会使用)

  3. Linq (以后专门讲 Linq 的时候讲)

​ 使用 XmlDocument 类读取是较方便最容易理解和操作的方法

​ XML 文件:

<?xml version="1.0" encoding="UTF-8"?>
<!--TestXML.xml-->
<Root>
   <name>xxx</name>
   <age>18</age>
   <Item id="1" num="10"/>
   <Friend>
      <name>小明</name>
      <age>8</age>
   </Friend>
   <Friend>
      <name>小红</name>
      <age>10</age>
   </Friend>
</Root>

(一)读取 xml 文件信息

using System.Xml;

XmlDocument xml = new XmlDocument();

// 通过XmlDocument读取xml文件 有两个API

// 1.直接根据xml字符串内容 来加载xml文件
// 存放在Resorces文件夹下的xml文件加载处理
TextAsset asset = Resources.Load<TextAsset>("TestXml");
print(asset.text);
// 通过这个方法 就能够翻译字符串为xml对象
xml.LoadXml(asset.text);

// 2.是通过xml文件的路径去进行加载
// 存放在StreamingAssets文件夹下的xml文件加载处理
xml.Load(Application.streamingAssetsPath + "/TestXml.xml");

(二)读取元素和属性信息

​ 节点信息类:XmlNode 单个节点信息类
​ 节点列表信息:XmlNodeList 多个节点信息类

// 获取xml当中的根节点
XmlNode root = xml.SelectSingleNode("Root");
// 再通过根节点 去获取下面的子节点
XmlNode nodeName = root.SelectSingleNode("name");
// 如果想要获取节点包裹的元素信息 直接 .InnerText
print(nodeName.InnerText);

XmlNode nodeAge = root.SelectSingleNode("age");
print(nodeAge.InnerText);

XmlNode nodeItem = root.SelectSingleNode("Item");
// 第一种方式 直接 中括号获取信息 
print(nodeItem.Attributes["id"].Value);
print(nodeItem.Attributes["num"].Value);
// 第二种方式 
print(nodeItem.Attributes.GetNamedItem("id").Value);
print(nodeItem.Attributes.GetNamedItem("num").Value);

// 这里是获取 一个节点下的同名节点的方法
XmlNodeList friendList = root.SelectNodes("Friend");

// 遍历方式一:迭代器遍历
foreach (XmlNode item in friendList)
{
    print(item.SelectSingleNode("name").InnerText);
    print(item.SelectSingleNode("age").InnerText);
}

// 遍历方式二:通过for循环遍历
// 通过XmlNodeList中的 成员变量 Count可以得到 节点数量
for (int i = 0; i < friendList.Count; i++)
{
    print(friendList[i].SelectSingleNode("name").InnerText);
    print(friendList[i].SelectSingleNode("age").InnerText);
}

(三)总结

1.读取 XML 文件

XmlDocument xml = new XmlDocument();

// 读取文本方式1-xml.LoadXml(传入xml文本字符串)
// 读取文本方式2-xml.Load(传入路径)

2.读取元素和属性

// 获取单个节点 
XmlNode node = xml.SelectSingleNode(节点名);
// 获取多个节点
XmlNodeList nodeList = xml.SelectNodes(节点名);

// 获取节点元素内容:node.InnerText
// 获取节点元素属性:
// 1.
item.Attributes["属性名"].Value;
// 2.
item.Attributes.GetNamedItem("属性名").Value;

// 通过迭代器遍历或者循环遍历XmlNodeList对象 可以获取到各单个元素节点

三、C# 存储修改 XML

(一)决定存储在哪个文件夹下

​ 注意:存储 xml 文件,在 Unity 中一定是使用各平台都可读可写可找到的路径

  1. Resources 可读不可写,打包后找不到 ❌

  2. Application.streamingAssetsPath 可读 PC 端可写 找得到 ❌

  3. Application.dataPath 打包后找不到 ❌

  4. Application.persistentDataPath 可读可写找得到 ✔️

string path = Application.persistentDataPath + "/PlayerInfo2.xml";
print(Application.persistentDataPath);

(二)存储 XML 文件

​ 关键类 XmlDocument:用于创建节点 存储文件

​ 关键类 XmlDeclaration:用于添加版本信息

​ 关键类 XmlElement:节点类

​ 存储有 5 步:文章来源地址https://www.toymoban.com/news/detail-615794.html

1.创建文本对象

XmlDocument xml = new XmlDocument();

2.添加固定版本信息

// 这一句代码 相当于就是创建<?xml version="1.0" encoding="UTF-8"?>这句内容
// 第三个参数传空串就可以了,目前不用管
XmlDeclaration xmlDec = xml.CreateXmlDeclaration("1.0", "UTF-8", "");
// 创建完成过后 要添加进入 文本对象中
xml.AppendChild(xmlDec);

3.添加根节点

XmlElement root = xml.CreateElement("Root");
xml.AppendChild(root);

4.为根节点添加子节点

// 加了一个 name子节点
XmlElement name = xml.CreateElement("name");
name.InnerText = "xxx";
root.AppendChild(name);

XmlElement atk = xml.CreateElement("atk");
atk.InnerText = "10";
root.AppendChild(atk);

XmlElement listInt = xml.CreateElement("listInt");
for (int i = 1; i <= 3; i++)
{
    XmlElement childNode = xml.CreateElement("int");
    childNode.InnerText = i.ToString();
    listInt.AppendChild(childNode);
}
root.AppendChild(listInt);

XmlElement itemList = xml.CreateElement("itemList");
for (int i = 1; i <= 3; i++)
{
    XmlElement childNode = xml.CreateElement("Item");
    // 添加属性
    childNode.SetAttribute("id", i.ToString());
    childNode.SetAttribute("num", (i * 10).ToString());
    itemList.AppendChild(childNode);
}
root.AppendChild(itemList);

5.保存

xml.Save(path);

(三)修改 XML 文件

using System.IO;

// 1.先判断是否存在文件
if( File.Exists(path) )
{
    // 2.加载后 直接添加节点 移除节点即可
    XmlDocument newXml = new XmlDocument();
    newXml.Load(path);

    // 修改就是在原有文件基础上 去移除 或者添加
    // 移除
    // 这种是一种简便写法 通过 "/" 来区分父子关系
    XmlNode node = newXml.SelectSingleNode("Root/atk");
    // XmlNode node = newXml.SelectSingleNode("Root").SelectSingleNode("atk");
    // 得到自己的父节点
    XmlNode root2 = newXml.SelectSingleNode("Root");
    // 移除子节点方法
    root2.RemoveChild(node);
    // 直接删除自己
    // node.ParentNode.RemoveChild(node);

    // 添加节点
    XmlElement speed = newXml.CreateElement("moveSpeed");
    speed.InnerText = "20";
    root2.AppendChild(speed);

    // 改了记得存
    newXml.Save(path);
}

到了这里,关于Unity XML2——C#读写XML的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Unity XML3——XML序列化

    ​ 序列化:把对象转化为可传输的字节序列过程称为序列化,就是把想要存储的内容转换为字节序列用于存储或传递 ​ 反序列化:把字节序列还原为对象的过程称为反序列化,就是把存储或收到的字节序列信息解析读取出来使用 1.准备数据结构 2.进行序列化 XmlSerializer:用

    2024年02月15日
    浏览(29)
  • Unity基本的文件创建、读写

    一、文件创建、删除、遍历等 1.1 创建文件 使用.NET提供的System.IO库中的File静态类,或者FileInfo类等。删除移动拷贝什么的比较简单就不写了,这两个类都能完成,都提供了对文件的基本操作,只不过FileInfo类提供的信息更加详细,还有文件的名称,所属文件夹等。 值得一提的

    2024年02月06日
    浏览(52)
  • Unity使用CSV读写表格文件

    CSV(逗号分隔值文件格式):以纯文本形式存储表格数据。 1.挂载脚本 2.回到unity,在脚本组件上输入数据 3.右击Assets文件夹,点击Refresh,可以看到多出了一个StreamingAssets文件夹和data文件 4.使用记事本打开,可以看到写入的数据(使用excel打开会出现乱码,使用wps不会,这里

    2024年02月16日
    浏览(25)
  • Unity自带方法读写JSON文件

    最近使用JSON文件保存模型表情数据,简单记录一下。 首先自定义数据类,需要记录表情每帧的所有BlendShape及时间戳: 使用Unity自带的JSON读写方法: 保存与读取JSON文件: 简单记录,部分变量与方法未展示,仅供参考。

    2024年02月12日
    浏览(36)
  • 1.10 Unity中的数据存储 XML

    一、XML 1.介绍 XML是一个文档后缀名是*.xml XML是一个特殊格式的文档 XML是可扩展的标记性语言 XML是Extentsible Markup Language的缩 写 XML是由万维网联盟(W3C)创建的标记语言,用于定义编码人类和机器可以读取的文档的语法。它通过使用定义文档结构的标签以及如何存储和传输文档来

    2024年01月21日
    浏览(29)
  • Unity学习笔记--数据持久化XML文件(1)

    Xml是可拓展标记语言,一种文件格式。我们使用xml来完成对数据持久化的存储。等待我们有一程序运行结束之后,将内存中的数据进行保存,(保存在硬盘/服务器)实现对数据的持久化存储。 xml文件的读取和保存以及修改 要点: XMl文件的加载 XML文件节点的查找访问 XML文件

    2024年02月05日
    浏览(34)
  • Unity 数据读取|(五)XML文件解析(XmlDocument,XmlTextReader)

    XML ,全称为可扩展标记语言( eXtensible Markup Language ),是一种用于描述、传输和存储数据的语言。它被设计用来传输和存储数据,与 HTML 不同,XML 的主要目的不在于显示数据,而是强调数据的结构性。XML 使用类似 HTML 的标签表示数据的结构和其他信息。 XML的优点: 易于人

    2024年02月05日
    浏览(47)
  • Unity数据解析(Json、XML、CSV、二进制)

    常见的数据解析(Json、XML、CSV、二进制)

    2024年02月21日
    浏览(31)
  • Unity3D学习之数据持久化——XML

    最终达到的效果 树形结构 属性通过空格隔开 属性名 = 引导包裹的内容 这两个代表的东西是一样的 可以在菜鸟上使用xml验证器 xml验证器 在Resources文件夹创建一个xml文件 把文件再复制到streamingAsserts 3.2.1 通过Resources文件进行读取 3.2.2 通过xml文件进行加载 获取根节点 遍历同名

    2024年01月23日
    浏览(34)
  • 【unity数据持久化】XML数据管理器知识点

    👨‍💻个人主页 :@元宇宙-秩沅 👨‍💻 hallo 欢迎 点赞👍 收藏⭐ 留言📝 加关注✅! 👨‍💻 本文由 秩沅 原创 👨‍💻 收录于专栏 :Unity基础实战 XML是什么 XML(Extensible Markup Language)是一种类似于 HTML,但是没有使用预定义标记的语言。因此,可以根据自己的设计需求

    2024年02月11日
    浏览(28)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包