在开发中,我们经常有遇到要处理大量字符串的情况,这时候XML就起到了非常重要的作用。C#中是如何处理XML的呢,下面我们通过一些简单的例子代码去认识了解一下。
XML的读取:
这里我随便弄了个xml(不好意思,真的 是很随便的。。。。)。
代码如下:
首先要导入using
using System.Xml;
using System.IO;
private ArrayList Adialogue=new ArrayList();
private ArrayList Bdialogue=new ArrayList();
void LoadXml() { //创建xml文档 XmlDocument xml = new XmlDocument(); XmlReaderSettings set = new XmlReaderSettings(); set.IgnoreComments = true;//这个设置是忽略xml注释文档的影响。有时候注释会影响到xml的读取 xml.Load(XmlReader.Create((Application.dataPath+"/data.xml"),set)); //得到objects节点下的所有子节点 XmlNodeList xmlNodeList = xml.SelectSingleNode("objects").ChildNodes; //遍历所有子节点 foreach(XmlElement xl1 in xmlNodeList) { if(xl1.GetAttribute("id")=="1") { //继续遍历id为1的节点下的子节点 foreach(XmlElement xl2 in xl1.ChildNodes) { //放到一个textlist文本里 textList.Add(xl2.GetAttribute("name") + ": " + xl2.InnerText); //得到name为a的节点里的内容。放到TextList里 if (xl2.GetAttribute("name") == "a") { Adialogue.Add(xl2.GetAttribute("name") + ": " + xl2.InnerText); } //得到name为b的节点里的内容。放到TextList里 else if (xl2.GetAttribute("name") == "b") { Bdialogue.Add(xl2.GetAttribute("name") + ": " + xl2.InnerText); } } } } print(xml.OuterXml); }
代码有注释,我就不多说了。看效果吧,可以看到里面的内容已经被读取出来
2、修改MXL
直接上代码了。
void updateXML() { string path = Application.dataPath + "/data.xml"; if(File.Exists(path)) { XmlDocument xml = new XmlDocument(); xml.Load(path); XmlNodeList xmlNodeList = xml.SelectSingleNode("objects").ChildNodes; foreach(XmlElement xl1 in xmlNodeList) { if(xl1.GetAttribute("id")=="1") { //把messages里id为1的属性改为5 xl1.SetAttribute("id","5"); } if (xl1.GetAttribute("id") =="2") { foreach(XmlElement xl2 in xl1.ChildNodes) { if(xl2.GetAttribute("map")=="abc") { //把mission里map为abc的属性改为df,并修改其里面的内容 xl2.SetAttribute("map","df"); xl2.InnerText = "我成功改变了你"; } } } } xml.Save(path); } }
修改完后的xml如下,可以对比下前面的,已经改了
3、现在到创建xml了。还是直接上代码
void CreateXML() { string path = Application.dataPath + "/data2.xml"; if(!File.Exists(path)) { //创建最上一层的节点。 XmlDocument xml = new XmlDocument(); //创建最上一层的节点。 XmlElement root = xml.CreateElement("objects"); //创建子节点 XmlElement element = xml.CreateElement("messages"); //设置节点的属性 element.SetAttribute("id","1"); XmlElement elementChild1 = xml.CreateElement("contents"); elementChild1.SetAttribute("name","a"); //设置节点内面的内容 elementChild1.InnerText = "这就是你,你就是天狼"; XmlElement elementChild2 = xml.CreateElement("mission"); elementChild2.SetAttribute("map","abc"); elementChild2.InnerText = "去吧,少年,去实现你的梦想"; //把节点一层一层的添加至xml中,注意他们之间的先后顺序,这是生成XML文件的顺序 element.AppendChild(elementChild1); element.AppendChild(elementChild2); root.AppendChild(element); xml.AppendChild(root); //最后保存文件 xml.Save(path); } }
又到了看效果的时候了。我们可以看到在assets的目录下多了一个data2.xml文件。(可能出现的有点慢,unity来不及刷新,大家可以到文件夹里看下。)
4、那如果要添加xml又如何去操作呢?其实和创建xml是差不多的,只是前面几句不一样而已。
void addXMLData() { string path = Application.dataPath + "/data2.xml"; if(File.Exists(path)) { XmlDocument xml = new XmlDocument(); xml.Load(path); XmlNode root = xml.SelectSingleNode("objects"); //下面的东西就跟上面创建xml元素是一样的。我们把他复制过来就行了 XmlElement element = xml.CreateElement("messages"); XmlElement elementChild1 = xml.CreateElement("contents"); elementChild1.SetAttribute("name","b"); //设置节点内面的内容 elementChild1.InnerText = "天狼,你的梦想就是。。。。。"; XmlElement elementChild2 = xml.CreateElement("mission"); elementChild2.SetAttribute("map","def"); elementChild2.InnerText = "我要妹子。。。。。。。。。。"; //最后保存文件 xml.Save(path); } }
效果如下。
(编辑:李大同)
【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!
|