5.19XML數(shù)據(jù)生成和數(shù)據(jù)解析

在Unity引擎中如何生成本地XML數(shù)據(jù)?

第一步:引用C#的命名空間System.Xml

第二步:生成XML文檔(XmlDocument類(lèi))

第三步:生成根元素(XmlElement類(lèi))添加給文檔對(duì)象

第四步:循環(huán)生成子元素添加給父元素

第五步:將?成的XML文檔保存

usingUnityEngine;

usingSystem.Collections;

usingSystem.Xml;

usingSystem.IO;

usingSystem.Collections.Generic;

publicclassXMLScript:MonoBehaviour{

voidStart( ){

//CreatXml( );

//AddXml( );

//DeleXml( );

//showXml( );

Dictionarydic=showXml( );

foreach(stringkeyindic.Keys){

print(key+":"+dic[key]);

}

}

//生成XML

public void CreatXml( ){

//獲得Xml保存路徑(放在Assets文件夾下)

string filePath=Application.dataPath+"/XmlFile/myXml.xml";

//判斷當(dāng)前路徑下是否已經(jīng)存在該文件

if(!File.Exists(filePath)){

//1.生成XML文檔實(shí)例

XmlDocument xmlDoc=new XmlDocument( );

//生成聲明語(yǔ)句

XmlNode? dec=xmlDoc.CreateXmlDeclaration("1.0","utf-8",null);

xmlDoc.AppendChild(dec);

//2.生成根節(jié)點(diǎn)

XmlElement root=xmlDoc.CreateElement("Cube");

//3.生成子節(jié)點(diǎn)

XmlElement? trans=xmlDoc.CreateElement("Transform");

XmlElement? pos=xmlDoc.CreateElement("position");

XmlElement? x=xmlDoc.CreateElement("x");

x.InnerText="10";

XmlElement? y=xmlDoc.CreateElement("y");

y.InnerText="20";

XmlElement? z=xmlDoc.CreateElement("z");

z.InnerText="30";

XmlElement? gameElement=xmlDoc.CreateElement("GameObject");

//設(shè)置屬性

gameElement.SetAttribute("name","Cube");

gameElement.SetAttribute("tag","Player");

XmlAttribute? att=xmlDoc.CreateAttribute("layer");

att.Value="Everything";

gameElement.SetAttributeNode(att);

XmlElement?? sta=xmlDoc.CreateElement("Static");

sta.InnerText="NavigationStatic";

gameElement.AppendChild(sta);

root.AppendChild(gameElement);

XmlElement? gameElement_1=xmlDoc.CreateElement("GameObject");

//設(shè)置屬性

gameElement_1.SetAttribute("name","Sphere");

gameElement_1.SetAttribute("tag","Player");

XmlAttribute att_1=xmlDoc.CreateAttribute("layer");

att_1.Value="Everything";

gameElement_1.SetAttributeNode(att_1);

XmlElement sta_1=xmlDoc.CreateElement("Static");

sta_1.InnerText="NavigationStatic";

gameElement_1.AppendChild(sta_1);

root.AppendChild(gameElement_1);

root.AppendChild(trans);

pos.AppendChild(x);

pos.AppendChild(y);

pos.AppendChild(z);

trans.AppendChild(pos);

xmlDoc.AppendChild(root);

//4.保存到本地

xmlDoc.Save(filePath);

}

}

public void AddXml( ){

string filePath=Application.dataPath+"/XmlFile/myXml.xml";

if(File.Exists(filePath)){

XmlDocument? xmlDoc=newXmlDocument( );

//加載已有的XML文件夾

xmlDoc.Load(filePath);

//獲取將要添加的節(jié)點(diǎn)的父節(jié)點(diǎn)(只能從父節(jié)點(diǎn)一層一層往下找)

XmlNode? trans=xmlDoc.SelectSingleNode("Cube").SelectSingleNode("Transform");

//創(chuàng)建新的子節(jié)點(diǎn)

XmlElement? newElement=xmlDoc.CreateElement("rotation");

XmlElement? x=xmlDoc.CreateElement("x");

x.InnerText="10";

XmlElement? y=xmlDoc.CreateElement("y");

y.InnerText="20";

XmlElement? z=xmlDoc.CreateElement("z");

z.InnerText="30";

newElement.AppendChild(x);

newElement.AppendChild(y);

newElement.AppendChild(z);

trans.AppendChild(newElement);

xmlDoc.Save(filePath);

}

}

public void? DeleXml( ){

string? filePath=Application.dataPath+"/XmlFile/myXml.xml";

if(File.Exists(filePath)){

XmlDocument? xmlDoc=newXmlDocument( );

xmlDoc.Load(filePath);

XmlNode? root=xmlDoc.SelectSingleNode("Cube");

XmlNodeList?? nodeList=root.ChildNodes;

foreach(XmlElement?? xmlEle? in? nodeList){

//獲取標(biāo)簽烤宙,判斷是否是要?jiǎng)h除的標(biāo)簽

if(xmlEle.Name=="GameObject"){

if(xmlEle.GetAttribute("name")=="Cube"){

//刪除屬性

//xmlEle.RemoveAttribute("name");

//刪除節(jié)點(diǎn)

//xmlEle.RemoveAll();

//更改屬性

xmlEle.SetAttribute("layer","Nothing");

//更改節(jié)點(diǎn)

//xmlEle.InnerText="";

}

}

}

xmlDoc.Save(filePath);

}

}

public? Dictionary? showXml( ){

string? filePath=Application.dataPath+"/XmlFile/myXml.xml";

Dictionary<string,string>? dic=new? Dictionary<string,string>( );

if(File.Exists(filePath)){

XmlDocumentxml Doc=new XmlDocument( );

xmlDoc.Load(filePath);

XmlNodeList? nodeList=xmlDoc.SelectSingleNode("Cube").ChildNodes;

foreach(XmlElementxmlEleinnodeList){

if(xmlEle.Name=="Transform"){

XmlNodeList? childList=xmlEle.SelectSingleNode("position").ChildNodes;

foreach(XmlElementxeinchildList){

//存入字典

dic.Add(xe.Name,xe.InnerText);

stringstr="true";

print(bool.Parse(str));

}

}

}

}

return? dic;

}

}

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末冀宴,一起剝皮案震驚了整個(gè)濱河市祟印,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖掉房,帶你破解...
    沈念sama閱讀 217,406評(píng)論 6 503
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件茧跋,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡卓囚,警方通過(guò)查閱死者的電腦和手機(jī)瘾杭,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,732評(píng)論 3 393
  • 文/潘曉璐 我一進(jìn)店門(mén),熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)哪亿,“玉大人粥烁,你說(shuō)我怎么就攤上這事∮蓿” “怎么了讨阻?”我有些...
    開(kāi)封第一講書(shū)人閱讀 163,711評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)篡殷。 經(jīng)常有香客問(wèn)我钝吮,道長(zhǎng),這世上最難降的妖魔是什么板辽? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,380評(píng)論 1 293
  • 正文 為了忘掉前任奇瘦,我火速辦了婚禮,結(jié)果婚禮上劲弦,老公的妹妹穿的比我還像新娘耳标。我一直安慰自己,他們只是感情好邑跪,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,432評(píng)論 6 392
  • 文/花漫 我一把揭開(kāi)白布次坡。 她就那樣靜靜地躺著,像睡著了一般呀袱。 火紅的嫁衣襯著肌膚如雪贸毕。 梳的紋絲不亂的頭發(fā)上,一...
    開(kāi)封第一講書(shū)人閱讀 51,301評(píng)論 1 301
  • 那天夜赵,我揣著相機(jī)與錄音,去河邊找鬼乡革。 笑死寇僧,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的沸版。 我是一名探鬼主播嘁傀,決...
    沈念sama閱讀 40,145評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼视粮!你這毒婦竟也來(lái)了细办?” 一聲冷哼從身側(cè)響起,我...
    開(kāi)封第一講書(shū)人閱讀 39,008評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤辨萍,失蹤者是張志新(化名)和其女友劉穎甸赃,沒(méi)想到半個(gè)月后查邢,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體衫贬,經(jīng)...
    沈念sama閱讀 45,443評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡犁罩,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,649評(píng)論 3 334
  • 正文 我和宋清朗相戀三年庄拇,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了呈础。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片毡惜。...
    茶點(diǎn)故事閱讀 39,795評(píng)論 1 347
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡瓤狐,死狀恐怖瞬铸,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情础锐,我是刑警寧澤嗓节,帶...
    沈念sama閱讀 35,501評(píng)論 5 345
  • 正文 年R本政府宣布,位于F島的核電站皆警,受9級(jí)特大地震影響拦宣,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜耀怜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,119評(píng)論 3 328
  • 文/蒙蒙 一恢着、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧财破,春花似錦掰派、人聲如沸。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 31,731評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至俊性,卻和暖如春略步,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背定页。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 32,865評(píng)論 1 269
  • 我被黑心中介騙來(lái)泰國(guó)打工趟薄, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人典徊。 一個(gè)月前我還...
    沈念sama閱讀 47,899評(píng)論 2 370
  • 正文 我出身青樓杭煎,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親卒落。 傳聞我的和親對(duì)象是個(gè)殘疾皇子羡铲,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,724評(píng)論 2 354

推薦閱讀更多精彩內(nèi)容