数据持久化值XML

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using System.Xml;
/// <summary>
/// xml文件的读取和创建
/// </summary>
public class XMLDemo : MonoBehaviour
{

  void Start()
  {
    //创建xml文件
    //CreateXML();
    //解析xml文件的两种方法
    //方法一
    // ParseXML();
    //方法二
    //ParseXML2();
    ParseXML3();
  }

  void CreateXML()
  {
    /*
     * 一个xml文件只能有一个root结点,这个root结点的名字可以任意取
     <root>
  <heros>
    <hero id="1">
      <name>超人</name>
      <age>92</age>
    </hero>
    <hero id="2">
      <name>蝙蝠侠</name>
      <age>86</age>
    </hero>
    <hero id="3">
      <name>绿巨人</name>
      <age>99</age>
    </hero>
  </heros> 
</root>
     */
    //创建一个xml文件
    XmlDocument doc = new XmlDocument();
    //设置xml文件的版本和编码格式
    XmlDeclaration dec = doc.CreateXmlDeclaration("1.0", "utf-8", "");
    doc.AppendChild(dec);
    //创建根节点,并将结点添加进文件中
    XmlElement rootEle = doc.CreateElement("root");
    doc.AppendChild(rootEle);
    //创建heros结点
    XmlElement herosEle = doc.CreateElement("heros");
    rootEle.AppendChild(herosEle);
    //每个英雄对应的属性值存放于string数组中
    string[] names = new string[] { "超人", "蝙蝠侠", "绿巨人" };
    string[] ages = new string[] { "92", "86", "99" };
    for (int i = 0; i < names.Length; i++)
    {
      //创建hero结点
      XmlElement heroEle = doc.CreateElement("hero");
      //创建id属性
      //第一种方法
      //heroEle.SetAttribute("id", i + "");
      //第二种方法
      XmlAttribute att = doc.CreateAttribute("id");
      att.Value = i + "";
      heroEle.Attributes.Append(att);
      //创建name结点
      XmlElement nameEle = doc.CreateElement("name");
      nameEle.InnerText = names[i];
      heroEle.AppendChild(nameEle);
      //创建age结点
      XmlElement ageEle = doc.CreateElement("age");
      ageEle.InnerText = ages[i];
      heroEle.AppendChild(ageEle);
      herosEle.AppendChild(heroEle);
    }
    doc.Save(Application.dataPath + "/XMLDemo/XML/textXML.xml");
  }
  //解析方法一
  void ParseXML()
  {
    //创建xml文件
    XmlDocument doc = new XmlDocument();
    //读取xml文档
    doc.Load(Application.dataPath + "/XMLDemo/XML/textXML.xml");
    //获取根节点
    //注意:这里一定需要是LastChild,而不是FirstChild,FirstChild会报错!!
    XmlElement rooeEle = doc.LastChild as XmlElement;//doc.LastChild是一个node类型,因为node和element是一样,所以强制转换成XmlElement
    //获取heros结点
    XmlElement herosEle = rooeEle.FirstChild as XmlElement;
    //遍历循环hero结点
    foreach (XmlElement heroEle in herosEle)
    {
      //获取id
      string id = heroEle.GetAttribute("id");
      //获取name
      string name = heroEle.ChildNodes[0].InnerText;
      //获取age
      string age = heroEle.ChildNodes[1].InnerText;
      Debug.Log(id + " " + name + "  " + age);
    }
  }
  //解析方法二
  void ParseXML2()
  {
    //创建xml文档类
    XmlDocument doc = new XmlDocument();
    doc.Load(Application.dataPath + "/XMLDemo/XML/textXML.xml");
    /*
     XPath解析方法,路径语法 
      /root/heros/hero/name                     绝对路径
      //name                                    相对路径
      //heros/hero[2]/name                      获取第二个hero结点name
      //heros/hero[last()-1]/name               获取倒数第二个结点
      //heros/hero[position()<3]/name           获取前两个hero结点
      //heros/hero[@id=2]/name                  获取属性id为2的heroname
     */
    //doc.SelectSingleNode("");//选择一个结点
    //读取所有的name结点
    XmlNodeList list = doc.SelectNodes("//name");
    XmlNodeList list1 = doc.SelectNodes("//heros/hero[position()<3]/name");
    foreach (XmlElement ele in list1)
    {
      Debug.Log(ele.InnerText);
    }
  }

  //有命名空间的解析
  void ParseXML3()
  {
    XmlDocument doc = new XmlDocument();
    doc.Load(Application.dataPath + "/XMLDemo/XML/textXML.xml");

    //创建一个名称空间管理器
    XmlNamespaceManager nsManager = new XmlNamespaceManager(doc.NameTable);
    nsManager.AddNamespace("hero", "http://www.baidu.com");
    nsManager.AddNamespace("default", "http://www.163.com");

    XmlNodeList list1 = doc.SelectNodes("/default:root/default:heros/default:hero/hero:name",nsManager);
    foreach (XmlElement ele in list1)
    {
      Debug.Log(ele.InnerText);
    }
  }
}

对应的XML文件:

<?xml version="1.0" encoding="utf-8"?>
<root xmlns:hero="http://www.baidu.com" xmlns="http://www.163.com">
  <heros>
    <hero id="0">
      <hero:name>超人</hero:name>
      <age>92</age>
    </hero>
    <hero id="1">
      <name>蝙蝠侠</name>
      <age>86</age>
    </hero>
    <hero id="2">
      <name>绿巨人</name>
      <age>99</age>
    </hero>
  </heros>
</root>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值