Xml解析

XML解析
用到了一下内容:

1.Application.dataPath——数据路径(Assets目录)

  1. File.Exists ——判断文件是否存在
  2. XmlDocument ——Xml文件
  3. XmlDeclaration——Xml声明
  4. XmlElement——Xml元素
  5. CreateXmlDeclaration——创建Xml声明
  6. CreateElement——创建元素
  7. AppendChild——附加子物体
  8. SetAttribute——设置属性
  9. GetAttribute—— 获得属性
    10.InnerText——内部文本
  10. Load—— 加载
  11. SelectSingleNode——选择单个节点
  12. ChildNodes——子节点
  13. RemoveAll——移除所有
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
using System.Xml;
using System.IO;
using UnityEditor;

public class XmlTest : MonoBehaviour
{
    private void Start()
    {
        CreateXml();
        UpdateXml();
        OnAddXml();
        OnDeleteXml();
        OnShowXml();
        AssetDatabase.Refresh();
    }
    /// <summary>
    /// 创建
    /// </summary>
    public void CreateXml()
    {
        //创建解析路径
        string xmlPath = Application.dataPath + "/XmlDate/myxml.xml";
        //如果当前路径不存在
        if (!File.Exists(xmlPath))
        {
            //创建解析文档实例
            XmlDocument xmlDocument = new XmlDocument();
            //创建描述性信息
            XmlDeclaration xmlDec = xmlDocument.CreateXmlDeclaration("1.0", "utf-8", null);
            //把描述信息作为实例的子节点
            xmlDocument.AppendChild(xmlDec);
            //创建root节点,也就是最上层节点
            XmlElement root = xmlDocument.CreateElement("transform");
            //继续创建下一层节点
            XmlElement xmlElement = xmlDocument.CreateElement("translate");
            //设置节点的两个属性id和name
            xmlElement.SetAttribute("id", "1");
            xmlElement.SetAttribute("name", "QQ");
            //设置属性
            //继续创建下一层节点
            XmlElement translate_x = xmlDocument.CreateElement("X");
            //设置节点中的数值
            translate_x.InnerText = "100";
            XmlElement translate_y = xmlDocument.CreateElement("Y");
            translate_y.InnerText = "100";
            XmlElement translate_z = xmlDocument.CreateElement("Z");
            translate_z.InnerText = "100";

            //将值设置为xmlElent的子物体
            //把节点根据层级关系一层一层添加到XMLDoc中
            //注意先后顺序,根据顺序生成xml文件
            xmlElement.AppendChild(translate_x);
            xmlElement.AppendChild(translate_y);
            xmlElement.AppendChild(translate_z);

            XmlElement xmlElement1 = xmlDocument.CreateElement("Scale");
            xmlElement1.SetAttribute("name", "df");
            xmlElement1.SetAttribute("性别", "女");
            XmlElement scale_x = xmlDocument.CreateElement("X");
            scale_x.InnerText = "56";
            XmlElement scale_y = xmlDocument.CreateElement("Y");
            scale_y.InnerText = "78";
            XmlElement scale_z = xmlDocument.CreateElement("Z");
            scale_z.InnerText = "78";
            xmlElement1.AppendChild(scale_x);
            xmlElement1.AppendChild(scale_y);
            xmlElement1.AppendChild(scale_z);
            //将xmlElement设置为root子物体
            root.AppendChild(xmlElement);
            root.AppendChild(xmlElement1);
            //
            xmlDocument.AppendChild(root);
            //将xml文件保存到目录下
            xmlDocument.Save(xmlPath);
            Debug.Log("创建成功");
        }
    }
    /// <summary>
    /// 更新数据
    /// </summary>
    public void UpdateXml()
    {
        //xml保存的路径                           
        string filepath = Application.dataPath + "/XmlDate/myxml.xml";
        //判断当前路径下是否有该文件
        if (File.Exists(filepath))
        {
            //创建xml文档实例
            XmlDocument xmlDoc = new XmlDocument();
            //根据路径读取xml文件数据
            xmlDoc.Load(filepath);
            //得到transform下的所有子节点
            //获取子节点
            XmlNodeList xmlNodeList = xmlDoc.SelectSingleNode("transform").ChildNodes;
            //遍历所有的子节点
            foreach (XmlElement item in xmlNodeList)
            {
                if (item.GetAttribute("name") == "1212123")
                {
                    item.SetAttribute("name", "1212123");
                    item.SetAttribute("性别", "男");
                    //foreach (XmlElement xmlElement in item.ChildNodes)
                    //{
                    //if (xmlElement.Name=="X")
                    //{
                    //    item.InnerText = "66";
                    //}
                    item.InnerText = "12345689";
                    //}
                }
                //拿到节点中属性id=1的节点
                //如果id=1
                if (item.GetAttribute("id") == "1")
                {
                    //更新节点中的id和name的参数
                    //设置id=2   SetAttribute:设置属性
                    item.SetAttribute("id", "2");
                    item.SetAttribute("name", "SS");
                    //继续遍历id=2中的子节点
                    foreach (XmlElement xmlElement in item.ChildNodes)
                    {
                        //修改节点为x的数值
                        if (xmlElement.Name == "X")
                        {
                            xmlElement.InnerText = "99";
                        }
                        //修改节点为y的值
                        if (xmlElement.Name == "Y")
                        {
                            xmlElement.InnerText = "99";
                        }
                        //修改节点为z的数值
                        if (xmlElement.Name == "Z")
                        {
                            xmlElement.InnerText = "99";
                        }
                    }
                }
            }
            //保存xml
            xmlDoc.Save(filepath);
            Debug.Log("UpdateXml Success!");
        }
    }
    /// <summary>
    /// 增加
    /// </summary>
    public void OnAddXml()
    {
        //xml保存路径
        string filePath = Application.dataPath + "/XmlDate/myxml.xml";
        //判断当前路径下是否有该文件
        if (File.Exists(filePath))
        {
            //创建xml文档实例
            XmlDocument xmlDocument = new XmlDocument();
            //根据路径将xml读取出来
            xmlDocument.Load(filePath);
            //获取transform的根节点
            XmlNode xmlNode = xmlDocument.SelectSingleNode("transform");
            //创建scale的子节点
            XmlElement xmlElement = xmlDocument.CreateElement("Rotation");
            //设置子节点的两个属性id和name
            xmlElement.SetAttribute("id", "3");
            xmlElement.SetAttribute("name", "DD");
            //创建三个子节点
            //分别为x,y,z
            //同时给这三个子节点设置数值
            XmlElement scale_x = xmlDocument.CreateElement("X");
            scale_x.InnerText = "88";
            XmlElement scale_y = xmlDocument.CreateElement("Y");
            scale_y.InnerText = "88";
            XmlElement scale_z = xmlDocument.CreateElement("Z");
            scale_z.InnerText = "88";
            //创建子节点的层级关系
            xmlElement.AppendChild(scale_x);
            xmlElement.AppendChild(scale_y);
            xmlElement.AppendChild(scale_z);
            xmlNode.AppendChild(xmlElement);
            xmlDocument.AppendChild(xmlNode);
            //保存xml文件,将其保存在目录下
            xmlDocument.Save(filePath);
            print("添加成功");
        }
    }
    /// <summary>
    /// 删除
    /// </summary>
    public void OnDeleteXml()
    {
        //创建一个路径
        string filePath = Application.dataPath + "/XmlDate/myxml.xml";
        //判断该路径下文件是否存在
        if (File.Exists(filePath))
        {
            //创建xml文档实例
            XmlDocument xmlDocument = new XmlDocument();
            //根据路径读取xml文件
            xmlDocument.Load(filePath);
            //得到transform所有的子节点
            XmlNodeList xmlNodeList = xmlDocument.SelectSingleNode("transform").ChildNodes;
            //遍历所有子节点
            foreach (XmlElement item in xmlNodeList)
            {
                //判断子节点的属性id是否等于2
                //拿到节点中属性id=2的节点
                if (item.GetAttribute("id") == "2" || item.GetAttribute("id") == "3")
                {
                    //移除节点的属性id
                    //item.RemoveAttribute("id");
                    //在xmlNodeList的子节点内循环
                    foreach (XmlElement xl in item.ChildNodes)
                    {
                        //把节点x中的数值移除
                        if (xl.Name == "X")
                        {
                            xl.RemoveAll();
                        }

                        if (xl.Name == "Y")
                        {
                            //xl.RemoveAll();
                        }
                        if (xl.Name == "Z")
                        {
                            //xl.RemoveAll();
                        }
                    }
                }
            }
            //保存
            xmlDocument.Save(filePath);
            Debug.Log("Delete Success!");
        }
    }
    public void OnShowXml()
    {
        //创建路径
        string filePath = Application.dataPath + "/XmlDate/myxml.xml";
        //判断路径下文件是否存在
        if (File.Exists(filePath))
        {
            //创建一个实例
            XmlDocument xmlDocument = new XmlDocument();
            //根据路径读取文件
            xmlDocument.Load(filePath);
            //得到transform下所有子节点
            XmlNodeList xmlNodeList = xmlDocument.SelectSingleNode("transform").ChildNodes;
            //遍历所有子节点
            foreach (XmlElement item in xmlNodeList)
            {
                //得到节点中id=2或者id=3的节点
                if (item.GetAttribute("id") == "2" || item.GetAttribute("id") == "3")
                {
                    //遍历属性id=2或3的所有子节点
                    foreach (XmlElement xmlElement in item.ChildNodes)
                    {
                        //得到节点y下的数值
                        if (xmlElement.Name == "Y")
                        {
                            Debug.Log(xmlElement.InnerText);
                        }
                    }
                }
            }
        }
    }
}

在这里插入图片描述
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值