5.19XML数据生成和数据解析

在Unity引擎中如何生成本地XML数据?

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

第二步:生成XML文档(XmlDocument类)

第三步:生成根元素(XmlElement类)添加给文档对象

第四步:循环生成子元素添加给父元素

第五步:将⽣成的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";

//判断当前路径下是否已经存在该文件

if(!File.Exists(filePath)){

//1.生成XML文档实例

XmlDocument xmlDoc=new XmlDocument( );

//生成声明语句

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

xmlDoc.AppendChild(dec);

//2.生成根节点

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

//3.生成子节点

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");

//设置属性

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");

//设置属性

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);

//获取将要添加的节点的父节点(只能从父节点一层一层往下找)

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

//创建新的子节点

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){

//获取标签,判断是否是要删除的标签

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

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

//删除属性

//xmlEle.RemoveAttribute("name");

//删除节点

//xmlEle.RemoveAll();

//更改属性

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

//更改节点

//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;

}

}

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 204,189评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,577评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,857评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,703评论 1 276
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,705评论 5 366
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,620评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,995评论 3 396
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,656评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,898评论 1 298
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,639评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,720评论 1 330
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,395评论 4 319
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,982评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,953评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,195评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 44,907评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,472评论 2 342

推荐阅读更多精彩内容