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);
}
}