XML文件操作,新建,增删改查

15 篇文章 0 订阅
1 篇文章 0 订阅

XML文件操作,新建,增删改查

Unity环境下的XML文件操作,Unity环境下面的脚本如下:


using UnityEngine;
using System.Collections.Generic;
using System.IO;
using System.Xml;
using System.Text;

/// <summary>
/// Unity环境下的XML文件操作
/// </summary>
public class XMLOperation : MonoBehaviour
{
    /// <summary>
    /// 文件路径
    /// </summary>
    private string xmlPath;
    /// <summary>
    /// Unity中绘制UI
    /// </summary>
    void OnGUI()
    {
        if (GUILayout.Button("创建XML文件"))
        {
            xmlPath = CreateXmlFile();
        }

        if (GUILayout.Button("修改XML文件_1"))
        {
            ModifyXMLFile_1(xmlPath);
        }

        if (GUILayout.Button("修改XML文件_2"))
        {
            ModifyXMLFile_2(xmlPath);
        }

        if (GUILayout.Button("新增节点"))
        {
            AddXMLNode(xmlPath);
        }

        if (GUILayout.Button("移除节点"))
        {
            RemoveXMLNode(xmlPath);
        }
    }
    /// <summary>
    /// 获取一个文件路径
    /// </summary>
    /// <returns></returns>
    private string GetFilePath()
    {
        //保存xmlDoc到Unity工程目录中 Application.dataPath + "/res/test.xml"; 
        string dir = Application.dataPath + "/res";
        string path = dir + "/test.xml";
        if (!Directory.Exists(dir))
        {
            Directory.CreateDirectory(dir);
        }
        if (!File.Exists(path))
        {
            File.Create(path);
        }
        return path;
    }
    /// <summary>
    /// 保存XML文件
    /// </summary>
    /// <param name="xmlDoc"></param>
    /// <param name="xmlPath"></param>
    private void SaveXMLFile(XmlDocument xmlDoc, string xmlPath)
    {
        ///  
        /// 保存创建为无BOM开头标示的XML文件  
        StreamWriter sw = new StreamWriter(xmlPath, false, new UTF8Encoding(false));
        xmlDoc.Save(sw);
        //xmlDoc.Save(path);   
        sw.WriteLine();
        sw.Close();
    }
    /// <summary>  
    /// 创建一个简单的XML文件  
    /// </summary>  
    public string CreateXmlFile()
    {
        string xmlPath = GetFilePath();

        XmlDocument xmlDoc = new XmlDocument();
        ///创建XML的声明  
        xmlDoc.AppendChild(xmlDoc.CreateXmlDeclaration("1.0", "utf-8", null));

        ///创建根节点  
        XmlElement books = xmlDoc.CreateElement("books");
        xmlDoc.AppendChild(books);

        /// -------------------节点1
        XmlComment comment = xmlDoc.CreateComment("注释:节点1");
        books.AppendChild(comment);

        XmlElement book = xmlDoc.CreateElement("book");
        books.AppendChild(book);
        book.SetAttribute("bookname", "放生");

        XmlElement author = xmlDoc.CreateElement("author");
        book.AppendChild(author);
        author.InnerText = "张三";

        /// -------------------节点2
        comment = xmlDoc.CreateComment("注释:节点2");
        books.AppendChild(comment);
        book = xmlDoc.CreateElement("book");
        books.AppendChild(book);

        book.SetAttribute("bookname", "无罪");

        author = xmlDoc.CreateElement("author");
        book.AppendChild(author);
        author.InnerText = "李四";

        /// -------------------节点3
        comment = xmlDoc.CreateComment("注释:节点3");
        books.AppendChild(comment);
        book = xmlDoc.CreateElement("book");
        books.AppendChild(book);

        book.SetAttribute("bookname", "大海");

        author = xmlDoc.CreateElement("author");
        book.AppendChild(author);
        author.InnerText = "王二";

        ///  

        SaveXMLFile(xmlDoc, xmlPath);

        return xmlPath;
    }
    /// <summary>
    /// 修改XML的元素_1
    /// </summary>
    /// <param name="xmlPath"></param>
    private void ModifyXMLFile_1(string xmlPath)
    {
        XmlDocument xmlDoc = new XmlDocument();
        xmlDoc.Load(xmlPath);

        /// 获取根元素
        XmlElement root = xmlDoc.DocumentElement;
        XmlNodeList nodelist = root.ChildNodes;
        string modifyStr = "_M1";
        foreach (XmlNode node in nodelist)
        {
            switch (node.NodeType)
            {
                case XmlNodeType.Comment:
                    {
                        string value = node.Value;
                        node.Value = value + modifyStr;
                    }
                    break;
                case XmlNodeType.Element:
                    {
                        XmlAttribute xmlAttribute = node.Attributes["bookname"];
                        string value = xmlAttribute.Value;
                        xmlAttribute.Value = value + modifyStr;

                        XmlNode childNode = node.SelectSingleNode("author");
                        string innerText = childNode.InnerText;
                        childNode.InnerText = innerText + modifyStr;
                    }
                    break;
            }
        }
        
        /
        SaveXMLFile(xmlDoc, xmlPath);
    }
    /// <summary>
    /// 修改XML的元素_2
    /// </summary>
    /// <param name="xmlPath"></param>
    private void ModifyXMLFile_2(string xmlPath)
    {
        XmlDocument xmlDoc = new XmlDocument();
        xmlDoc.Load(xmlPath);

        /// 获取根元素
        XmlNode root = xmlDoc.SelectSingleNode("books");
        XmlNodeList nodelist = root.SelectNodes("book");
        string modifyStr = "_M2";
        foreach (XmlNode node in nodelist)
        {
            XmlNode tempnode = node.PreviousSibling;
            if (tempnode != null && tempnode.NodeType == XmlNodeType.Comment)
            {
                //string value = tempnode.Value;
                //tempnode.Value = value + modifyStr;
                string InnerText = tempnode.InnerText;
                tempnode.InnerText = InnerText + modifyStr;
            }

            XmlAttribute xmlAttribute = node.Attributes["bookname"];
            string value = xmlAttribute.Value;
            xmlAttribute.Value = value + modifyStr;

            XmlNode childNode = node.SelectSingleNode("author");
            string innerText = childNode.InnerText;
            childNode.InnerText = innerText + modifyStr;
        }

        /
        SaveXMLFile(xmlDoc, xmlPath);
    }
    /// <summary>
    /// 新增XML的元素
    /// </summary>
    /// <param name="xmlPath"></param>
    private void AddXMLNode(string xmlPath)
    {
        XmlDocument xmlDoc = new XmlDocument();
        xmlDoc.Load(xmlPath);
        XmlElement books = xmlDoc.DocumentElement;

        /// -------------------节点Add
        XmlComment comment = xmlDoc.CreateComment("注释:节点Add");
        books.AppendChild(comment);
        XmlElement book = xmlDoc.CreateElement("book");
        books.AppendChild(book);
        book.SetAttribute("bookname", "男人不是神");

        XmlElement author = xmlDoc.CreateElement("author");
        book.AppendChild(author);
        author.InnerText = "麻子";

        SaveXMLFile(xmlDoc, xmlPath);
    }
    /// <summary>
    /// 移除XML的元素
    /// </summary>
    /// <param name="xmlPath"></param>
    private void RemoveXMLNode(string xmlPath)
    {
        XmlDocument xmlDoc = new XmlDocument();
        xmlDoc.Load(xmlPath);
        XmlElement books = xmlDoc.DocumentElement;

        XmlNodeList xmlnodes = books.SelectNodes("book");
        List<XmlNode> selects = new List<XmlNode>();
        foreach (XmlNode node in xmlnodes)
        {
            string bookname = node.Attributes["bookname"].Value;
            if (bookname.Contains("男人不是神"))
            {
                XmlNode tempNode = node.PreviousSibling;
                if (tempNode != null && tempNode.NodeType == XmlNodeType.Comment)
                {
                    selects.Add(tempNode);
                }
                selects.Add(node);
            }
        }

        for (int i = 0, count = selects.Count; i < count; ++i)
        {
            XmlNode temp = selects[i];
            books.RemoveChild(temp);
        }

        //XmlNodeList xmlnodes = books.SelectNodes("book");
        //for (int i = 0; i < xmlnodes.Count; )
        //{
        //    XmlNode node = xmlnodes[i];
        //    string bookname = node.Attributes["bookname"].Value;
        //    if (bookname.Contains("男人不是神"))
        //    {
        //        XmlNode tempNode = node.PreviousSibling;
        //        if (tempNode != null && tempNode.NodeType == XmlNodeType.Comment)
        //        {
        //            books.RemoveChild(tempNode);
        //        }
        //        books.RemoveChild(node);
        //        xmlnodes = books.SelectNodes("book");
        //    }
        //    else
        //    {
        //        ++i;
        //    }
        //}

        SaveXMLFile(xmlDoc, xmlPath);
    }
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值