Xml文件操作(创建、读取、写入、修改)
2025-5-30 14:10:11 点击:
创建Xml文件
创建Xml需要注意层级,一层有一层的添加到xml中:
using System.IO;
using System.Xml;
using UnityEngine;
public class Demo5 : MonoBehaviour
{
void Start()
{
CreateXML();
}
//创建XML
void CreateXML()
{
string path = Application.streamingAssetsPath + "/data.xml";
//创建xml文档
XmlDocument xml = new XmlDocument();
//创建根节点
XmlElement root = xml.CreateElement("Node");
//创建根节点的子节点
XmlElement element = xml.CreateElement("Person");
//设置根节点的子节点的属性
element.SetAttribute("id", "1");
//添加两个子节点到根节点的子节点的下面
XmlElement elementChild1 = xml.CreateElement("Name");
elementChild1.SetAttribute("name", "");
elementChild1.InnerText = "王五";
XmlElement elementChild2 = xml.CreateElement("Age");
elementChild2.SetAttribute("age", "");
elementChild2.InnerText = "18";
//把节点一层一层的添加至xml中,注意他们之间的先后顺序,这是生成XML文件的顺序
element.AppendChild(elementChild1);
element.AppendChild(elementChild2);
//再创建一个根节点的子节点
XmlElement element2 = xml.CreateElement("Person");
//设置根节点的子节点的属性 名字一样 属性不一样也可以
element2.SetAttribute("id", "2");
//添加两个子节点到根节点的子节点的下面
XmlElement elementChild3 = xml.CreateElement("Name");
elementChild3.SetAttribute("name", "");
elementChild3.InnerText = "李四";
XmlElement elementChild4 = xml.CreateElement("Age");
elementChild4.SetAttribute("age", "");
elementChild4.InnerText = "22";
element2.AppendChild(elementChild3);
element2.AppendChild(elementChild4);
//把节点一层一层的添加至xml中,注意他们之间的先后顺序,这是生成XML文件的顺序
root.AppendChild(element);
root.AppendChild(element2);
xml.AppendChild(root);
//*后保存文件
xml.Save(path);
}
}
读取Xml文件
读取Xml,需要从根节点一层一层往下找,根节点找子节点,子节点找孙节点。
我们就先以查找属性的方式找到我们需要的节点数据:
using System.IO;
using System.Xml;
using UnityEngine;
public class Demo5 : MonoBehaviour
{
void Start()
{
LoadXml();
}
//读取XML
void LoadXml()
{
XmlDocument xml = new XmlDocument();
xml.Load(Application.streamingAssetsPath + "/data.xml");
XmlNodeList xmlNodeList = xml.SelectSingleNode("Node").ChildNodes;
//遍历所有子节点
foreach (XmlElement xl1 in xmlNodeList)
{
if (xl1.GetAttribute("id") == "1")
{
//继续遍历id为1的节点下的子节点
foreach (XmlElement xl2 in xl1.ChildNodes)
{
if (xl2.GetAttribute("name") == "")
{
Debug.Log(xl2.InnerText);
}
else if (xl2.GetAttribute("age") == "")
{
Debug.Log(xl2.InnerText);
}
}
}
}
}
}
根据节点的名字进行查找:
using System.IO;
using System.Xml;
using UnityEngine;
public class Demo5 : MonoBehaviour
{
void Start()
{
ReadXml();
}
//读取XML
void ReadXml()
{
XmlDocument xml = new XmlDocument();
xml.Load(Application.streamingAssetsPath + "/data.xml");
XmlNodeList xmlNodeList = xml.SelectSingleNode("Node").ChildNodes;
//遍历所有子节点
foreach (XmlElement xl1 in xmlNodeList)
{
if (xl1.Name == "Person" && xl1.GetAttribute("id") == "1")
{
//继续遍历名字叫做Person,id为1的节点下的子节点
foreach (XmlElement xl2 in xl1.ChildNodes)
{
if (xl2.Name == "Name")
{
Debug.Log(xl2.InnerText);
}
else if (xl2.Name == "Age")
{
Debug.Log(xl2.InnerText);
}
}
}
}
}
}
不知道名字属性怎么办
using System.IO;
using System.Xml;
using UnityEngine;
public class Demo5 : MonoBehaviour
{
void Start()
{
ReadXml();
}
//读取XML
void ReadXml()
{
XmlDocument xml = new XmlDocument();
xml.Load(Application.streamingAssetsPath + "/data.xml");
//获取根节点
XmlNode rootNode = xml.FirstChild;
XmlNodeList nodeList = rootNode.ChildNodes;
//遍历所有子节点
int Count = nodeList.Count;
for (int i = 0; i < Count; i++)
{
Debug.Log(nodeList.Item(i).InnerText);
}
}
}
修改Xml文件
修改Xml文件的数据,就需要根据节点的名字或者节点的属性找到对应的节点修改数据,之后保存文件即可:
using System.IO;
using System.Xml;
using UnityEngine;
public class Demo5 : MonoBehaviour
{
void Start()
{
UpdateXML();
}
//修改XML
void UpdateXML()
{
string path = Application.streamingAssetsPath + "/data.xml";
if (File.Exists(path))
{
XmlDocument xml = new XmlDocument();
xml.Load(path);
XmlNodeList xmlNodeList = xml.SelectSingleNode("Node").ChildNodes;
foreach (XmlElement xl1 in xmlNodeList)
{
if (xl1.GetAttribute("id") == "1")
{
//把id为1的属性改为5
xl1.SetAttribute("id", "5");
}
if (xl1.GetAttribute("id") == "2")
{
foreach (XmlElement xl2 in xl1.ChildNodes)
{
if (xl2.Name == "Name")
{
//修改其里面的内容
xl2.SetAttribute("name", "abc");
xl2.InnerText = "赵六";
}
}
}
}
xml.Save(path);
}
}
}
添加数据
using System.IO;
using System.Xml;
using UnityEngine;
public class Demo5 : MonoBehaviour
{
void Start()
{
AddXMLData();
}
//添加XML
void AddXMLData()
{
string path = Application.streamingAssetsPath + "/data.xml";
if (File.Exists(path))
{
XmlDocument xml = new XmlDocument();
xml.Load(path);
XmlNode root = xml.SelectSingleNode("Node");
XmlElement element = xml.CreateElement("Person");
//设置节点的属性
element.SetAttribute("id", "2");
XmlElement elementChild1 = xml.CreateElement("Name");
elementChild1.SetAttribute("name", "ced");
elementChild1.InnerText = "李四";
XmlElement elementChild2 = xml.CreateElement("Age");
elementChild2.SetAttribute("age", "123");
elementChild2.InnerText = "11";
//把节点一层一层的添加至xml中,注意他们之间的先后顺序,这是生成XML文件的顺序
element.AppendChild(elementChild1);
element.AppendChild(elementChild2);
root.AppendChild(element);
xml.AppendChild(root);
//*后保存文件
xml.Save(path);
}
}
}
添加数据使用AppendChild()函数进行添加。
本文内容整理来自网络,版权归原作者所有如有问题,请联系我们!
- 上一篇:没有啦
- 下一篇:如何在 HoloLens 上查看FBX文件 2025/4/30


