unity 中的数据的解析,xml是一种文本传输格式。
xml的格式
xml的解析过程
xml实战
xml的文档
<?xml version="1.0" encoding="utf-8" ?>
<users>
<user id="1002"/>
<user id="2001">
<name>gabriel</name>
<age>18</age>
<country>china</country>
</user>
<user id="2003">
<name>钟离</name>
<age>36</age>
<country>璃月</country>
</user>
</users>
xml格式
1.开头是固定格式 <?xml version="1.0" encoding="utf-8" ?>
2.有且只有一个根节点 <users> ......</users>
3.节点的两种方式
<user id="1002"/> 这是一个<........../>
<user id="2001"> 这是 <....> </....>
</user>
4.特性
<user id="1002"/> id=“10002”是特性
5.节点是嵌套的
6.特性 节点 节点内容
这个文件需要在解决方案下,xmlText.txt右键-属性--如果由较新则赋值,复制到编译后的文件夹中,不然路径会出错。
编译后文件的路径,一般在项目工程文件夹的--bin--debug--.exe
疑问:
疑问:
是不是使用xmlproject.Load("xmlText.txt");只能读取txt文件??
不是的,load()这个函数也可以读取xmlDemo.xml 类型的文件.
拓展
load()可以读取什么类型函数?
我们显示使用第三种string,路径!!
xml实战代码
using System;
using System.Xml;
namespace xmlTran
{
class Program
{
static void Main(string[] args)
{
Console.WriteLine("Hello World!");
//读取这个文件
//解析这个文件xml
XmlDocument xmlproject = new XmlDocument();
xmlproject.Load("xmlText.txt");
XmlNode rootNode = xmlproject.SelectSingleNode("users");//根节点
//子节点
XmlNodeList userList = rootNode.ChildNodes;
foreach (XmlNode perUser in userList)
{
//访问第一个的属性 XmlElement类型才可以获得特性id
XmlElement userElent = (XmlElement)perUser;
Console.WriteLine(userElent.GetAttribute("id"));
//第一层子对象的查找
XmlNodeList xmlsonElent = userElent.ChildNodes;
//把子节点遍历
foreach (XmlNode sonXml in xmlsonElent)
{
if ("name".Equals(sonXml.Name))
Console.WriteLine("姓名节点的内容" + sonXml.InnerText);
if ("age".Equals(sonXml.Name))
Console.WriteLine("年龄节点的内容" + sonXml.InnerText);
if ("country".Equals(sonXml.Name))
Console.WriteLine("国家节点的内容" + sonXml.InnerText);
}
}
Console.Read();
}
}
}
xml文档
<?xml version="1.0" encoding="utf-8" ?>
<users>
<user id="1002"/>
<user id="2001">
<name>gabriel</name>
<age>18</age>
<country>china</country>
</user>
<user id="2003">
<name>钟离</name>
<age>36</age>
<country>璃月</country>
</user>
</users>
结果
Hello World!
1002
2001
姓名节点的内容gabriel
年龄节点的内容18
国家节点的内容china
2003
姓名节点的内容钟离
年龄节点的内容36
国家节点的内容璃月
xml解析的坑
文件加载
1.文件加载
使用的是xmlDocument类型的.Load(路径);
路径的文件可以是.txt.
数组类型
2.XmlNodeList 是存放xmlNode的数组
命名空间
3.使用 using System.Xml; 的命名空间
类型解析
4.存在xmlDocument ,XmlElemnt,XmlNode,XmlNodeList等类型
xmlDocument 是使用load(“路径”)来加载xml文件
XmlNodeList 是用了存放节点数组
XmlNode 是存放单个节点类型
XmlElemnt 是存放单个节点类型,但是可以使用GetAttribute("id"),来获得id的特性
//userElent.GetAttribute("id")
//(XmlElement)perUser perUser是XmlNode节点,XmlNode类型可以XmlElemnt类型互相转换
方法
5.方法
xmlproject.SelectSingleNode("users"); //用来获得根节点(XmlDocument类型)
rootNode.ChildNodes(获得子节点//返回的数组XmlNodeList
无论是XmlElement类型查找子节点,还是XmlNode类型查找子节点,但是返回的都是XmlNodeList 类型的数组)
XmlNode属性
6.XmlNode.属性
.Name 获得子节点的名字
XmlNode.Name 代表的是节点的名字<name></name> <id></id>
//判断节点的名字,在输出内容 if("name".Equals(节点类型变量.Name))
//if("age".Equals(sonXml.Name))
.InnerText 获得子节点的的内容
sonXml.InnerText,是获得这个节点的内容《id》633《/id》 ---633
《country》china《/country》 ---china
XmlElemnt.属性
7.XmlElemnt.属性
userElent.GetAttribute("id"),获得id的内容
//<user id="2001">
<name>gabriel</name>
<age>18</age>
<country>china</country>
</user>