Xml文件操作(創(chuàng)建、讀取、寫(xiě)入、修改)
2022/9/11??????點(diǎn)擊:
創(chuàng)建Xml文件
創(chuàng)建Xml需要注意層級(jí),層有層的添加到xml中:
using System.IO;
using System.Xml;
using UnityEngine;
public class Demo5 : MonoBehaviour
{
void Start()
{
CreateXML();
}
//創(chuàng)建XML
void CreateXML()
{
string path = Application.streamingAssetsPath + "/data.xml";
//創(chuàng)建xml文檔
XmlDocument xml = new XmlDocument();
//創(chuàng)建根節(jié)點(diǎn)
XmlElement root = xml.CreateElement("Node");
//創(chuàng)建根節(jié)點(diǎn)的子節(jié)點(diǎn)
XmlElement element = xml.CreateElement("Person");
//設(shè)置根節(jié)點(diǎn)的子節(jié)點(diǎn)的屬性
element.SetAttribute("id", "1");
//添加兩個(gè)子節(jié)點(diǎn)到根節(jié)點(diǎn)的子節(jié)點(diǎn)的下面
XmlElement elementChild1 = xml.CreateElement("Name");
elementChild1.SetAttribute("name", "");
elementChild1.InnerText = "王五";
XmlElement elementChild2 = xml.CreateElement("Age");
elementChild2.SetAttribute("age", "");
elementChild2.InnerText = "18";
//把節(jié)點(diǎn)層層的添加至xml中,注意他們之間的先后順序,這是生成XML文件的順序
element.AppendChild(elementChild1);
element.AppendChild(elementChild2);
//再創(chuàng)建個(gè)根節(jié)點(diǎn)的子節(jié)點(diǎn)
XmlElement element2 = xml.CreateElement("Person");
//設(shè)置根節(jié)點(diǎn)的子節(jié)點(diǎn)的屬性 名字樣 屬性不樣也可以
element2.SetAttribute("id", "2");
//添加兩個(gè)子節(jié)點(diǎn)到根節(jié)點(diǎn)的子節(jié)點(diǎn)的下面
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);
//把節(jié)點(diǎn)層層的添加至xml中,注意他們之間的先后順序,這是生成XML文件的順序
root.AppendChild(element);
root.AppendChild(element2);
xml.AppendChild(root);
//*后保存文件
xml.Save(path);
}
}
讀取Xml文件
讀取Xml,需要從根節(jié)點(diǎn)層層往下找,根節(jié)點(diǎn)找子節(jié)點(diǎn),子節(jié)點(diǎn)找孫節(jié)點(diǎn)。
我們就先以查找屬性的方式找到我們需要的節(jié)點(diǎn)數(shù)據(jù):
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;
//遍歷所有子節(jié)點(diǎn)
foreach (XmlElement xl1 in xmlNodeList)
{
if (xl1.GetAttribute("id") == "1")
{
//繼續(xù)遍歷id為1的節(jié)點(diǎn)下的子節(jié)點(diǎn)
foreach (XmlElement xl2 in xl1.ChildNodes)
{
if (xl2.GetAttribute("name") == "")
{
Debug.Log(xl2.InnerText);
}
else if (xl2.GetAttribute("age") == "")
{
Debug.Log(xl2.InnerText);
}
}
}
}
}
}
根據(jù)節(jié)點(diǎn)的名字進(jìn)行查找:
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;
//遍歷所有子節(jié)點(diǎn)
foreach (XmlElement xl1 in xmlNodeList)
{
if (xl1.Name == "Person" && xl1.GetAttribute("id") == "1")
{
//繼續(xù)遍歷名字叫做Person,id為1的節(jié)點(diǎn)下的子節(jié)點(diǎn)
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");
//獲取根節(jié)點(diǎn)
XmlNode rootNode = xml.FirstChild;
XmlNodeList nodeList = rootNode.ChildNodes;
//遍歷所有子節(jié)點(diǎn)
int Count = nodeList.Count;
for (int i = 0; i < Count; i++)
{
Debug.Log(nodeList.Item(i).InnerText);
}
}
}
修改Xml文件
修改Xml文件的數(shù)據(jù),就需要根據(jù)節(jié)點(diǎn)的名字或者節(jié)點(diǎn)的屬性找到對(duì)應(yīng)的節(jié)點(diǎn)修改數(shù)據(jù),之后保存文件即可:
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")
{
//修改其里面的內(nèi)容
xl2.SetAttribute("name", "abc");
xl2.InnerText = "趙六";
}
}
}
}
xml.Save(path);
}
}
}
添加數(shù)據(jù)
using System.IO;
using System.Xml;
using UnityEngine;
public class Demo5 : MonoBehaviour
{
void Start()
{
AddXMLData();
}
//添加X(jué)ML
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");
//設(shè)置節(jié)點(diǎn)的屬性
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";
//把節(jié)點(diǎn)層層的添加至xml中,注意他們之間的先后順序,這是生成XML文件的順序
element.AppendChild(elementChild1);
element.AppendChild(elementChild2);
root.AppendChild(element);
xml.AppendChild(root);
//*后保存文件
xml.Save(path);
}
}
}
添加數(shù)據(jù)使用AppendChild()函數(shù)進(jìn)行添加。
本文來(lái)自網(wǎng)絡(luò),版權(quán)歸原作者所有。
- 上一篇:Excel文件操作(創(chuàng)建、讀取、寫(xiě)入、修改) 2022/9/11
- 下一篇:Json文件操作(創(chuàng)建、讀取、解析、修改) 2022/9/11
