Unity 中使用XML的预备知识

在整个XML处理过中,需要使用到的几个类的关系图:
类图
XMLNode 为抽象类,还实现了如下接口

public abstract class XmlNode : ICloneable, System.Collections.IEnumerable, System.Xml.XPath.IXPathNavigable

注:该类实现了W3C文档对象模型(DOM)1级核心和Core DOM级别2.DOM是XML文档的内存(高速缓存)树表示显示。是DOM的.NET实现基类,它支持XPath选择并提供编辑功能,,,

它的属性:
Attributes :(只读)
返回去一个XmlAttributeCollection含有该节点的属性,,如果节点类型是XmlAttributeCollection,则返回节点的属性,否则,此属性返回null;

public virtual System.Xml.XmlAttributeCollection Attributes { get; }

BaseURI:
返回 串,节点的加载位置,如果没有节点基本URL,则为String.Empty

public virtual string BaseURI { get; }

ChildNodes : 获得所有子节点

public virtual System.Xml.XmlNodeList ChildNodes { get; }

后知后觉:这是一个抽象类的方法和属性,,,()


XMLElement 主要是针对节点的一些属性进行操作
下面简单介绍它的属性,方法:

  • Attributes : 包含此节点的属性列表
public override System.Xml.XmlAttributeCollection Attributes { get; }
  • HasAttributes :当前节点是否具有属性
public virtual bool HasAttributes { get; }
  • InnerText :节点及其所有子节点连接值
public override string InnerText { get; set; }
  • InnerXml :这个节点的子标记
public override string InnerXml { get; set; }
  • Name :节点的限制名称 对于XmlElement节点,这是元素的标签名称。
  • NodeType :节点类型
  • ParentNode :获取节点的父节点

  • CloneNode() :创建此节点的副本

public override System.Xml.XmlNode CloneNode (bool deep);
  • getAttribute() : 获取属性;
public virtual string GetAttribute (string name);
  • GetAttributeNode () :获取属性节点
public virtual System.Xml.XmlAttribute GetAttributeNode (string name);

注:我想您看到这里也觉得有些烦了,,既然有获取(get)那肯定有设置(set),还有删除等方法,这里不再赘述,想了解具体一点可以去查MSDN


XMLDocument 主要是针对节点的CUID(用户识别号)操作

下面列举出个人人为比较常用的属性,方法:

  • DocumentElement :获取文档的根,没有则返回null
  • DocumentType :类型
  • InnerText :内文,节点及其所有子节点的值
public override string InnerText { set; }
  • InnerXml :当前节点的子节点标记
public override string InnerXml { get; set; }
  • Name 名称 , LocalName 本地名称
  • XmlNodeType :节点类型
  • CloneNode() : 克隆节点
  • CreateAttribute () : 创建属性
public System.Xml.XmlAttribute CreateAttribute (string name);
  • CreateNode(): 创建节点
public virtual System.Xml.XmlNode CreateNode (string nodeTypeString, string name, string namespaceURI);
  • Load() : 加载 三个重载
//参数是:包含要加载的XML文档的流。
public virtual void Load (System.IO.Stream inStream);
//参数是:从指定的TextReader加载XML文档。
public virtual void Load (System.IO.TextReader txtReader);
//参数是:包含要加载的XML文档的文件的URL。URL可以是本地文件或HTTP URL(Web地址)
//好理解,经常用
public virtual void Load (string filename);
  • Save () : 保存 三个重载函数
//注释同上段代码
public virtual void Save (System.IO.Stream outStream);
public virtual void Save (System.IO.TextWriter writer);
public virtual void Save (string filename);

简单使用:

using System.Xml;
using UnityEngine;

public class XmlHandler : MonoBehaviour {

    XmlDocument Xdoc = null;

    void Start()
    {
        Xdoc = new XmlDocument();  //实例化
        Debug.Log("当前目录是:" + Application.dataPath);
        Xdoc.Load(Application.dataPath + "/data.xml");  //加载XML 文件

        XmlElement root = Xdoc.DocumentElement;   //获取跟节点
        Debug.Log("根元素是:"+ root.Name);

        XmlNode dataNode = root.SelectSingleNode("data");  //获取根节点下的子节点
        Debug.Log("节点名称"+dataNode.Name);

        for (int i = 0; i < dataNode.ChildNodes.Count; i++)
        {
            XmlElement xmElement = dataNode.ChildNodes[i] as XmlElement;

            if(xmElement.GetAttribute("id") == "1")
            {
                Debug.Log(dataNode.InnerXml);  //节点下的内容(string)
                Debug.Log("文本内容:"+dataNode.ChildNodes[i].InnerText);  //获取文本内容
                xmElement.SetAttribute("id", "3");   //属性更改id值
            }
        }
        //保存更改后的xml文件,,
        Xdoc.Save(Application.dataPath + "/data.xml");

        //如果这样写的话,会得到一个新的xml文件,,而原来的文件将不会被改变
        //Xdoc.Save(Application.dataPath + "/data1.xml");
    }
}
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
Unity 使用 proto,需要先安装 Google 的 protobuf 工具。然后在 Unity 项目导入相关的 proto 文件,使用 protoc 编译器生成对应的 C# 类代码。在 Unity ,可以通过这些 C# 类来序列化和反序列化 proto 数据。 具体的步骤如下: 1. 下载并安装 protobuf 工具,包括 protoc 编译器和 C# 支持库。 2. 在 Unity 创建一个 C# 类来表示你的 proto 数据结构。 3. 在 Unity 导入 proto 文件,使用 protoc 编译器生成对应的 C# 类代码。 4. 在 Unity 使用生成的 C# 类来序列化和反序列化 proto 数据。 以下是一个简单的示例代码,演示了如何在 Unity 使用 proto: ```csharp using System.Collections; using System.Collections.Generic; using UnityEngine; using Google.Protobuf; public class ProtoTest : MonoBehaviour { void Start() { // 创建一个 proto 数据结构 var msg = new MyMessage { Id = 1, Name = "ProtoTest", Values = { 1, 2, 3 } }; // 将 proto 数据序列化成二进制数据 var bytes = msg.ToByteArray(); // 将二进制数据反序列化成 proto 数据 var newMsg = MyMessage.Parser.ParseFrom(bytes); // 输出 proto 数据的内容 Debug.Log($"Id: {newMsg.Id}, Name: {newMsg.Name}, Values: {string.Join(", ", newMsg.Values)}"); } } // 定义一个 proto 数据结构 message MyMessage { int32 Id = 1; string Name = 2; repeated int32 Values = 3; } ``` 注意:在使用 proto 时,需要保证 Unity 和服务器端使用相同的 proto 文件和版本,否则可能会出现兼容性问题。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

陈言必行

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值