该教程资源来源于唐老狮,仅作学习分享交流
学习xml是因为看到了uitookit里出现了uxml 所以来学习一下
1.xml结构
2.基础语法
注释与开头固定写法
<!--第1行 注释格式 第2行代表版本和编码格式,是固定写法-->
<?xml version="1.0" encoding="UTF-8"?>
变量与树形结构
节点需要一对对存在<>和</>是一对 相当于c#中的 { 和 }是一对,这一对就叫做元素,一般对应c#中的字段
<!-- 根节点与其下的数据 -->
<根节点> <子节点1><数据> 123 </数据><数据下的数据>456</数据下的数据></子节点1>
</根节点>
根节点
└── 子节点1
├── 数据
│ └── 123
└── 数据下的数据
└── 456
属性
每个节点可以有其自己的属性,元素也可以改为属性,一般对应c#中的属性
节点名后面+空格 +属性名 = “数据”
<!-- 根节点与其下的数据 -->
<根节点> <子节点1><数据> 123 </数据><数据下的数据>456</数据下的数据></子节点1>
</根节点>
<!-- 属性-->
<节点1 数据 ="123">数据内容</节点1>
根节点
└── 节点1
├── 属性: 数据 = "123"
└── 内容: 数据内容
可以没有内容,就会变成下面这样
<节点1 数据 ="123"/>
节点1
└── 属性: 数据 = "123"
注意规则
3.练习翻译
下面是一个c#的类 那些特性只是提醒给你变量类型的,试试手写将其反序列化为xml吧
[XmlRoot("公司")]
public class 公司
{[XmlElement("公司名称")]public string 公司名称 { get; set; }[XmlElement("员工")]public List<员工> 员工列表 { get; set; }
}public class 员工
{[XmlAttribute("ID")]public int ID { get; set; }[XmlElement("姓名")]public string 姓名 { get; set; }[XmlElement("职位")]public string 职位 { get; set; }
}
答案
<?xml version="1.0" encoding="UTF-8"?><公司><公司名称>任意名称</公司名称><员工 ID="1" 姓名="张三" 职位="做unity的"/><员工 ID="2" 姓名="李四" 职位="做美术的"/><!-- 非属性来写一个员工的话 --><员工><ID>3</ID><姓名>王五</姓名><职位>做策划的</职位></员工>
</公司>
4.通过代码获取和修改xml
using System;
using System.Xml;class Program
{static void Main(){// 加载 XML 文件XmlDocument xmlDoc = new XmlDocument();xmlDoc.Load("example.xml");// 查找要修改的节点XmlNode employeeNode = xmlDoc.SelectSingleNode("/公司/员工[@ID='1']/职位");if (employeeNode != null){// 修改节点的值employeeNode.InnerText = "做策划的";// 保存更改xmlDoc.Save("example.xml");Console.WriteLine("XML 文件已更新。");}else{Console.WriteLine("未找到指定的节点。");}}
}
5.序列化与反序列化
序列化就是将c#文件转为xml ,xml是有序的 所以叫序列化
比如我有一个Person类 包含两个属性
[Serializable]
public class Person
{public string Name { get; set; }public int Age { get; set; }
}
用到using System.Xml.Serialization下的XmlSerializer 类
StreamWriter 和 StreamReader用于文件的读写操作
你当然可以在unity中用StreamingAsset中的类也是可以的
using System;
using System.IO;
using System.Xml.Serialization;class Program
{static void Main(){// 创建一个对象实例Person person = new Person { Name = "John Doe", Age = 30 };// 创建 XmlSerializer 实例XmlSerializer serializer = new XmlSerializer(typeof(Person));// 序列化对象并写入 XML 文件using (StreamWriter writer = new StreamWriter("person.xml")){serializer.Serialize(writer, person);}Console.WriteLine("对象已序列化到 XML 文件。");}
}
反序列化
using System;
using System.IO;
using System.Xml.Serialization;class Program
{static void Main(){// 创建 XmlSerializer 实例XmlSerializer serializer = new XmlSerializer(typeof(Person));// 从 XML 文件中读取数据并反序列化using (StreamReader reader = new StreamReader("person.xml")){Person person = (Person)serializer.Deserialize(reader);Console.WriteLine($"Name: {person.Name}, Age: {person.Age}");}}
}