Unity读写XML文件
来源:互联网 发布:淘宝摄影相机推荐 编辑:程序博客网 时间:2024/06/05 19:05
Unity读写文件,文件用xml的时候还挺多的。代码如下:
using UnityEngine;using System.Collections;using System.Xml;using System.IO;public class XMLDemo : MonoBehaviour{ private ArrayList Adialogue = new ArrayList(); private ArrayList Bdialogue = new ArrayList(); private ArrayList textList = new ArrayList(); // Use this for initialization void Start() { } // Update is called once per frame void Update() { } void OnGUI() { if (GUI.Button(new Rect(50, 50, 100, 50), "生成XML")) { CreateXML(); Debug.Log("生成XML"); } if (GUI.Button(new Rect(50, 100, 100, 50), "读取XML")) { LoadXml(); Debug.Log("读取XML"); } if (GUI.Button(new Rect(50, 150, 100, 50), "修改XML")) { updateXML(); Debug.Log("修改XML"); } if (GUI.Button(new Rect(50, 200, 100, 50), "增加XML节点")) { addXMLData(); Debug.Log("增加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"); element.SetAttribute("name", "2"); 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); } } void LoadXml() { //创建xml文档 XmlDocument xml = new XmlDocument(); xml.Load(Application.dataPath + "/data2.xml"); //得到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); print("******************" + xl2.GetAttribute("name") + ": " + xl2.InnerText); } //得到name为b的节点里的内容。放到TextList里 else if (xl2.GetAttribute("map") == "abc") { Bdialogue.Add(xl2.GetAttribute("name") + ": " + xl2.InnerText); print("******************" + xl2.GetAttribute("name") + ": " + xl2.InnerText); } } } } print(xml.OuterXml); } //修改 void updateXML() { string path = Application.dataPath + "/data2.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") == "5") { 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 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"); //设置节点的属性 element.SetAttribute("id", "2"); XmlElement elementChild1 = xml.CreateElement("contents"); elementChild1.SetAttribute("name", "b"); //设置节点内面的内容 elementChild1.InnerText = "天狼,你的梦想就是。。。。。"; XmlElement elementChild2 = xml.CreateElement("mission"); elementChild2.SetAttribute("map", "def"); elementChild2.InnerText = "我要妹子。。。。。。。。。。"; //把节点一层一层的添加至xml中,注意他们之间的先后顺序,这是生成XML文件的顺序 element.AppendChild(elementChild1); element.AppendChild(elementChild2); root.AppendChild(element); xml.AppendChild(root); //最后保存文件 xml.Save(path); } }}
对于节点删除的操作
//删除节点内容 private void DelXml(string image) { XmlDocument xmlDoc = new XmlDocument(); xmlDoc.Load(Server.MapPath("../flash/dati.xml")); XmlNodeList xnl = xmlDoc.SelectSingleNode("images").ChildNodes; //查找节点 foreach (XmlNode xn in xnl) { XmlElement xe = (XmlElement)xn; if (xe.InnerText.IndexOf(image,0) >= 0) { xn.ParentNode.RemoveChild(xn); // xn.RemoveAll(); } } xmlDoc.Save(Server.MapPath("../flash/dati.xml")); }
下面是方法中xpath的用法
最常见的XML数据类型有:Element, Attribute,Comment, Text. Element, 指形如<Name>Tom<Name>的节点。它可以包括:Element, Text, Comment, ProcessingInstruction, CDATA, and EntityReference. Attribute, 指在<Employee >中的粗体部分。 Comment,指形如:<!-- my comment --> 的节点。 //Text,指在<Name>Tom<Name>的粗体部分。 在XML中,可以用XmlNode对象来参照各种XML数据类型。 2.1 查询已知绝对路径的节点(集) objNodeList = objDoc.SelectNodes(“Company/Department/Employees/Employee”) 或者 objNodeList = objNode.SelectNodes(“/Company/Department/Employees/Employee”) 以上两种方法可返回一个NodeList对象,如果要返回单个节点可使用SelectSingleNode方法,该方法如果查询到一个或多个节点,返回第一个节点;如果没有查询的任何节点返回 Nothing。例如: objNode = objNode.SelectSingleNode(“/Company/Department/Employees/Employee”) 2.2 查询已知相对路径的节点(集) 可使用类似于文件路径的相对路径的方式来查询XML的数据 objNode = objDoc.SelectSingleNode(“Company/Department”) 2.3 查询已知元素名的节点(集) 在使用不规则的层次文档时,由于不知道中间层次的元素名,可使用//符号来越过中间的节点,查询其子,孙或多层次下的其他所有元素。例如: objNodeList = objDoc.SelectNodes(“Company//Employee”) 2.4 查询属性(attribute)节点 以上的各种方法都返回元素(element)节点(集),返回属性(attribute),只需要采用相应的方法,在属性名前加一个@符号即可,例如: objNodeList = objDoc.SelectNodes(“Company/Department/Employees/Employee/@id”) // 2.5 查询Text节点 //使用text()来获取Text节点。 //objNode = objDoc.SelectSingleNode(“Company/Department/Deparmt_Name/text()”) 2.6 查询特定条件的节点 使用[]符号来查询特定条件的节点。例如: (如果用XmlNode接收的节点,想要更改属性值就要强转成XmlElement) a. 返回id号为 10102的Employee节点 objNode = objDoc.SelectSingleNode(“Company/Department/Employees/Employee[@id=’10102’]”) //b. 返回Name为Zhang Qi的Name 节点 //objNode = objDoc.SelectSingleNode(“Company/Department/Employees/Employee/Name[text()=’Zhang Qi’]”) c. 返回部门含有职员22345的部门名称节点 objNode = objDoc.SelectSingleNode("Company/Department[Employees/Employee/@id='22345']/Department_Name") 2.7 查询多重模式的节点 使用 | 符号可以获得多重模式的节点。例如: objNodeList = objDoc.SelectNodes(“Company/Department/Department_Name | Company/Department/Manager”) 2.8 查询任意子节点 使用*符号可以返回当前节点的所有子节点。 objNodeList = objDoc.SelectNodes(“Company/*/Manager) 或者 objNodeList = objNode.ChildNodes 3 XML数据的编辑 3.1 增加一个元素的属性(attribute)节点 objNodeAttr As XmlNode objNodeAttr = objDoc.CreateAttribute("id", Nothing) objNodeAttr.InnerXml = "101" objNode.Attributes.Append(objNodeAttr) 3.2 删除一个元素的属性 objNode.Attributes.Remove(objNodeAttr) 3.3 增加一个子元素(Element) objNodeChild As XmlNode objNodeChild = objDoc.CreateElement(Nothing, "ID", Nothing) objNodeChild.InnerXml = "101" objNode.AppendChild(objNodeChild) 3.4 删除一个子元素 objNode.RemoveChild(objNodeChild) 3.5 替换一个子元素 objNOde.ReplaceChild(newChild,oldChild)
阅读全文
0 0
- Unity读写XML文件
- unity读写xml
- Unity 读写XML
- unity 读写文件
- unity利用c#读写xml
- unity IOs读写txt文件
- Unity-Excel文件的读写
- Unity文件目录的读写
- 读写XML文件
- 读写XML文件
- c#读写xml文件
- c#读写xml文件
- c#读写xml文件
- DOM 读写XML文件
- 读写XML文件
- C#读写xml文件
- 读写Xml文件
- c#读写xml文件
- MySQL服务器的远程链接设置
- HDU6025 Coprime Sequence (前缀后缀处理)
- 利用CRgn判断点是否在图形内部和图形是否在图形内部
- 使用IntelliJ IDEA 配置Maven(入门)
- poj 2299 Ultra-QuickSort(树状数组+离散化)
- Unity读写XML文件
- 区间dp小练
- SpringCloud(二):服务发现与服务注册
- HBase Coprocessor编程案例
- Servlet处理Form表单
- js转换时间戳与日期字符串
- Springboot+React+antd开发问题记(一)
- 快速傅里叶变换(FFT)的原理、实现及代码解析(附C#源码)
- mysql 存储过程 -- 游标的使用