untiy XMl 文件的读写添加删除操作代码有注释直接贴代码 untiy 学习讨论群 184386599
/// <summary>
/// 创建XMl文件
/// </summary>
/// <param name="path"></param>
/// <param name="name"></param>
public void CreateXML(string path, string name)
{
string tempPath = path + "//" + name;
if (!File.Exists(tempPath))
{
XmlDocument xmlDoc = new XmlDocument();
XmlNode header = xmlDoc.CreateProcessingInstruction("xml", "version = '1.0' encoding = 'UTF-8'");
xmlDoc.AppendChild(header);
//创建根节点
XmlElement rootElm = xmlDoc.CreateElement("HeroList");
创建子节点
//XmlElement roleInfo = doc.CreateElement("RoleInfo");
设置节点的属性
//roleInfo.SetAttribute("id", "1");
//roleInfo.SetAttribute("name","玩家信息");
创建子节点下面的元素
//XmlElement elmSub1 = doc.CreateElement("RoleId");
//elmSub1.InnerText = "10000";
//XmlElement elmSub2 = doc.CreateElement("name");
//elmSub2.InnerText = "zwl";
//XmlElement elmSub3 = doc.CreateElement("hp");
//elmSub3.InnerText = "100";
把节点一层一层的添加至XML中,每一层的顺序很重要
//roleInfo.AppendChild(elmSub1);
//roleInfo.AppendChild(elmSub2);
//roleInfo.AppendChild(elmSub3);
//rootElm.AppendChild(roleInfo);
//临时测试数据
string[] strsIds = { "1", "2" };
string[] strsnames = { "name1", "name2" };
string[] strschildNames = { "ffff", "2333" };
string[] strschildId = { "12222", "22222" };
string[] strschildhp = { "100", "200" };
for (int i = 0; i < 2; i++)
{
XmlElement roleInfo = xmlDoc.CreateElement("RoleInfo");
roleInfo.SetAttribute("id", strsIds[i]);
roleInfo.SetAttribute("name", strsnames[i]);
XmlElement elmSub1 = xmlDoc.CreateElement("RoleId");
XmlElement elmSub2 = xmlDoc.CreateElement("name");
XmlElement elmSub3 = xmlDoc.CreateElement("hp");
elmSub1.InnerText = strschildId[i];
elmSub2.InnerText = strschildNames[i];
elmSub3.InnerText = strschildhp[i];
//节点添加的顺序一定要准确
roleInfo.AppendChild(elmSub1);
roleInfo.AppendChild(elmSub2);
roleInfo.AppendChild(elmSub3);
rootElm.AppendChild(roleInfo);
}
xmlDoc.AppendChild(rootElm);
xmlDoc.Save(tempPath);
}
}
/// <summary>
/// 更新修改XMl文件
/// </summary>
/// <param name="path"></param>
/// <param name="name"></param>
public void UpdateXml(string path, string name)
{
string tempPath = path + "//" + name;
if (File.Exists(tempPath))
{
XmlDocument xmlDoc = new XmlDocument();
//加载xml
xmlDoc.Load(tempPath);
XmlNodeList nodeLists = xmlDoc.SelectSingleNode("HeroList").ChildNodes;
if (nodeLists == null || nodeLists.Count == 0)
{
Debug.Log("当前节点下为null");
}
else
{
for (int i = 0; i < nodeLists.Count; i++)
{
XmlElement tempElm = nodeLists[i] as XmlElement;
if (tempElm.GetAttribute("id") == "1") //获得节点的属性
{
tempElm.SetAttribute("id", "-1"); //设置节点的属性
}
XmlNodeList tempNodList = tempElm.ChildNodes; //获得一个节点下的所有子节点
for (int j = 0; j < tempNodList.Count; j++)
{
XmlElement tempElmChild = tempNodList[j] as XmlElement;
if (tempElmChild.Name == "RoleId")
{
tempElmChild.InnerText = "1-2222";
}
}
}
}
xmlDoc.Save(tempPath);
}
}
/// <summary>
/// 添加新建节点
/// </summary>
/// <param name="path"></param>
/// <param name="name"></param>
public void AddXml(string path, string name)
{
string tempPath = path + "//" + name;
if (File.Exists(tempPath))
{
XmlDocument xmlDoc = new XmlDocument();
xmlDoc.Load(tempPath);
//获得跟节点
XmlNode xmlRoot = xmlDoc.SelectSingleNode("HeroList");
//其实和创建一样
//1:创建一个跟节点下的子节点
XmlElement elmChildMyInfo = xmlDoc.CreateElement("MyInfo");
elmChildMyInfo.SetAttribute("id", "1");
elmChildMyInfo.SetAttribute("name", "myinfoeCHild");
XmlElement elmChild1 = xmlDoc.CreateElement("MP");
elmChild1.InnerText = "19999";
elmChildMyInfo.AppendChild(elmChild1);
//2创建已经存在的子节点下的一个节点
for (int i=0;i<xmlRoot.ChildNodes.Count;i++)
{
XmlElement tempElm = xmlRoot.ChildNodes[i] as XmlElement;
if (tempElm.GetAttribute("id") == "2")
{
XmlElement elmChildMP= xmlDoc.CreateElement("MP");
elmChildMP.InnerText = "19999";
tempElm.AppendChild(elmChildMP);
}
}
xmlRoot.AppendChild(elmChildMyInfo);
xmlDoc.AppendChild(xmlRoot);
xmlDoc.Save(tempPath);
}
}
/// <summary>
/// 删除Xml
/// </summary>
/// <param name="path"></param>
/// <param name="name"></param>
public void DeleteXml(string path, string name)
{
string tempPath = path + "//" + name;
if (File.Exists(tempPath))
{
XmlDocument xmlDoc = new XmlDocument();
xmlDoc.Load(tempPath);
//获得跟节点
XmlNodeList xmlNodeList = xmlDoc.SelectSingleNode("HeroList").ChildNodes;
for(int i=0;i<xmlNodeList.Count;i++)
{
XmlElement tempElm = xmlNodeList[i] as XmlElement;
if (tempElm.Name == "MyInfo")
{
tempElm.RemoveAll();
tempElm.ParentNode.RemoveChild(tempElm); //这一句会把字段也给删除掉 如果不加的话就会保留字段
}
if (tempElm.Name == "RoleInfo" && tempElm.GetAttribute("id") == "1")
{
for (int j=0;j< tempElm.ChildNodes.Count;j++)
{
XmlElement tempElm_1 = tempElm.ChildNodes[j] as XmlElement;
Debug.Log(tempElm_1.Name);
if(tempElm_1.Name == "RoleId")
{
tempElm_1.RemoveAll();
}
}
}
}
xmlDoc.Save(tempPath);
}
}
文件截图
untiy 学习讨论群 184386599