1. 前言
XML,全稱為可擴(kuò)展標(biāo)記語言(eXtensible Markup Language),是一種用于描述、傳輸和存儲(chǔ)數(shù)據(jù)的語言。它被設(shè)計(jì)用來傳輸和存儲(chǔ)數(shù)據(jù),與 HTML 不同,XML 的主要目的不在于顯示數(shù)據(jù),而是強(qiáng)調(diào)數(shù)據(jù)的結(jié)構(gòu)性。XML 使用類似 HTML 的標(biāo)簽表示數(shù)據(jù)的結(jié)構(gòu)和其他信息。
2. 優(yōu)缺點(diǎn)
-
XML的優(yōu)點(diǎn):
- 易于人類閱讀和編寫:XML文檔的格式清晰、易于理解,方便人們進(jìn)行編輯和查看。
- 跨平臺(tái)性:XML使用Unicode編碼,具有跨平臺(tái)性,可以在不同的操作系統(tǒng)、編程語言和地區(qū)之間進(jìn)行數(shù)據(jù)交換。
- 可擴(kuò)展性:XML可以自定義標(biāo)簽,適用于不同領(lǐng)域的擴(kuò)展和定制,具有較強(qiáng)的靈活性。
- 強(qiáng)大的查詢和操作能力:XML文檔的結(jié)構(gòu)化特性使其可以方便地被計(jì)算機(jī)程序解析和查詢,支持XPath等查詢語言,方便進(jìn)行數(shù)據(jù)操作。
-
XML的缺點(diǎn):文章來源:http://www.zghlxwxcb.cn/news/detail-752084.html
- 冗余數(shù)據(jù):XML文檔在描述數(shù)據(jù)時(shí)會(huì)產(chǎn)生大量的冗余數(shù)據(jù),尤其是在數(shù)據(jù)量較大的情況下,會(huì)導(dǎo)致文件體積較大。
- 性能問題:XML文檔的解析和查詢操作需要一定的時(shí)間和計(jì)算資源,在處理大量數(shù)據(jù)時(shí)可能會(huì)影響性能。
- 安全性問題:XML文檔可能包含惡意代碼,如XSS攻擊等,需要注意安全性問題。
- 不適用于所有數(shù)據(jù)類型:XML不適用于存儲(chǔ)所有類型的數(shù)據(jù),例如二進(jìn)制文件、大文本文件等不適合用XML存儲(chǔ)。
3. 解析
- 格式模板
<?xml version="1.0" encoding="UTF-8"?>
<root>
<element1>內(nèi)容1</element1>
<element2 attribute1="value1">內(nèi)容2</element2>
<element3 attribute2="value2">
<subelement>子內(nèi)容</subelement>
</element3>
</root>
3.1 XmlDocument
3.1.1 優(yōu)缺點(diǎn)
- 優(yōu)點(diǎn):
- 易于使用:XmlDocument提供了大量的方法和屬性,可以方便地操作和查詢XML文檔。它提供了對(duì)整個(gè)XML文檔的樹形結(jié)構(gòu)進(jìn)行遍歷和查詢的能力,使用戶可以輕松地獲取XML文檔中的節(jié)點(diǎn)、屬性、文本等內(nèi)容。
- 內(nèi)存占用較小:XmlDocument將整個(gè)XML文檔加載到內(nèi)存中,因此適用于處理較小的XML文件。由于整個(gè)XML文檔被加載到內(nèi)存中,用戶可以快速地訪問和查詢XML文檔中的任意節(jié)點(diǎn),而不需要進(jìn)行磁盤I/O操作。
- 缺點(diǎn):
- 處理大型文件時(shí)可能會(huì)遇到性能問題:由于XmlDocument將整個(gè)XML文檔加載到內(nèi)存中,因此在處理大型XML文件時(shí)可能會(huì)遇到性能問題。大量的XML數(shù)據(jù)可能會(huì)導(dǎo)致內(nèi)存溢出或性能下降。
- 不適用于流式處理:XmlDocument適用于一次性解析整個(gè)XML文檔,而不適用于流式處理。如果需要按需讀取XML文檔中的節(jié)點(diǎn),XmlDocument可能不是最佳選擇。
3.1.2 解析
- 讀?。?/li>
//1.讀取XML文件
//XmlDocument xml = new XmlDocument();
//讀取文本方式1-xml.LoadXml(傳入xml文本字符串)
//讀取文本方式2-xml.Load(傳入路徑)
//2.讀取元素和屬性
//獲取單個(gè)節(jié)點(diǎn) : XmlNode node = xml.SelectSingleNode(節(jié)點(diǎn)名)
//獲取多個(gè)節(jié)點(diǎn) : XmlNodeList nodeList = xml.SelectNodes(節(jié)點(diǎn)名)
//獲取節(jié)點(diǎn)元素內(nèi)容:node.InnerText
//獲取節(jié)點(diǎn)元素屬性:
//1.item.Attributes["屬性名"].Value
//2.item.Attributes.GetNamedItem("屬性名").Value
//通過迭代器遍歷或者循環(huán)遍歷XmlNodeList對(duì)象 可以獲取到各單個(gè)元素節(jié)點(diǎn)
XmlDocument doc = new XmlDocument();
doc.Load("example.xml");
XmlNode root = doc.DocumentElement;
XmlNode node = root.SelectSingleNode("http://player");
string name = node.Attributes["name"].Value;
int age = int.Parse(node.Attributes["age"].Value);
Debug.Log("Name: " + name);
Debug.Log("Age: " + age);
- 寫入:
//關(guān)鍵類 XmlDocument 用于創(chuàng)建節(jié)點(diǎn) 存儲(chǔ)文件
//關(guān)鍵類 XmlDeclaration 用于添加版本信息
//關(guān)鍵類 XmlElement 節(jié)點(diǎn)類
XmlDocument doc = new XmlDocument();
XmlElement root = doc.CreateElement("game");
XmlElement player = doc.CreateElement("player");
player.SetAttribute("name", "John");
player.SetAttribute("age", 25);
root.AppendChild(player);
doc.AppendChild(root);
doc.Save("example.xml");
3.2 XmlTextReader和XmlTextWriter
XMLTextReader 這個(gè)類設(shè)計(jì)的目的就是從XML文件中快速的讀取數(shù)據(jù),而對(duì)系統(tǒng)資源(主要包括內(nèi)存和處理器時(shí)間)不做很高的要求。文章來源地址http://www.zghlxwxcb.cn/news/detail-752084.html
3.2.1 優(yōu)缺點(diǎn)
- 優(yōu)點(diǎn):
- 適用于流式處理:XmlTextReader適用于按需讀取XML文檔中的節(jié)點(diǎn),適用于流式處理大型XML文件。通過逐個(gè)讀取XML文檔中的節(jié)點(diǎn),XmlTextReader可以避免一次性加載整個(gè)XML文件到內(nèi)存中,從而減少內(nèi)存占用和提高處理性能。
- 性能較好:由于XmlTextReader采用了事件驅(qū)動(dòng)的模型,因此可以更好地利用系統(tǒng)資源,提高處理性能。事件驅(qū)動(dòng)模型使得XmlTextReader可以更加高效地處理大型XML文件,同時(shí)減少CPU和內(nèi)存的使用。
- 缺點(diǎn):
- 事件驅(qū)動(dòng)模型需要更多代碼:相比XmlDocument類,XmlTextReader需要更多的代碼來實(shí)現(xiàn)對(duì)XML文檔的解析和處理。使用XmlTextReader進(jìn)行XML解析需要編寫更多的代碼來處理事件觸發(fā)和節(jié)點(diǎn)讀取。
- 不易于處理屬性值:XmlTextReader對(duì)于屬性值的處理不如XmlDocument方便,需要更多的代碼來實(shí)現(xiàn)。使用XmlTextReader讀取屬性值時(shí),需要額外編寫代碼來獲取節(jié)點(diǎn)的屬性并處理它們。
- 它是只讀的,僅向前的,不能在文檔中執(zhí)行向后導(dǎo)航操作
3.2.2 解析
- XmlTextReader讀取:
static void XmlTextReaderTest()
{
XmlTextReader textReader = new XmlTextReader(filePath3);
textReader.WhitespaceHandling = WhitespaceHandling.None;
while (textReader.Read())
{
if (textReader.NodeType == XmlNodeType.Element)
{
if (reader.Name == "player")
{
string name = reader.GetAttribute("name");
int age = int.Parse(reader.GetAttribute("age"));
Debug.Log("Name: " + name);
Debug.Log("Age: " + age);
}
}
if (textReader.NodeType == XmlNodeType.Text)
{
}
if (textReader.NodeType == XmlNodeType.EndElement)
{
}
}
//讀取完畢后要記得關(guān)閉流,否則會(huì)占用文檔,無法被其它線程打開
textReader.Close();
}
- XmlTextWriter寫入:
XmlTextWriter writer = new XmlTextWriter("example.xml", System.Text.Encoding.UTF8);
writer.WriteStartElement("game");
writer.WriteStartElement("player");
writer.WriteAttributeString("name", "John");
writer.WriteAttributeString("age", 25);
writer.WriteEndElement(); // player
writer.WriteEndElement(); // game
writer.Close();
到了這里,關(guān)于Unity 數(shù)據(jù)讀取|(五)XML文件解析(XmlDocument,XmlTextReader)的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!