unity _XML解析

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()可以读取什么类型函数?

https://learn.microsoft.com/zh-cn/dotnet/api/system.xml.xmldocument.load?view=net-7.0&redirectedfrom=MSDN#overloads

我们显示使用第三种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>


 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值