XML编码格式:
编码utf-8 无bom 以及utf-8 bom是不一样的;BOM——Byte Order Mark,就是字节序标记
utf8-bom格式的读取方式 需要先读取第一个字节
StringReader r = new StringReader(text);
r.Read();
document.LoadXml(r.ReadToEnd());
r.Close();
utf-8直接读取;
解析XML:
1.引入命名空间 System.Xml;
2.网络XML可以通过WWW进行加载
本地资源可以用
XmlDocument doc = new XmlDocument();
doc.Load("E:/myXML.xml"); //本地路径
docLoadXml(www.text);//文本
XMLDocument:xml文档
XmlElement root = xml.DocumentElement;
每个元素都是:XmlElement
//继承关系
XMLElement->XmlNode
根节点root是XMLElement;
//返回里面所有子节点XmlNode;
XmlNodeList arr=root.ChildNodes;
XmlNodeList集合:节点集合,通过下表访问元素;
每个元素都是XMLNode的类型;
如果想访问节点的属性就必须把节点进行向下转行:
XmlElement n=arr[0] as XMLElement;
string value=n.GetAttribute("属性名字")
XML:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using System.Xml;
using System.IO;
public class XMLDemo : MonoBehaviour
{
// Use this for initialization
void Start()
{
StartCoroutine(ResourceXml());
}
IEnumerator ResourceXml()
{
WWW www;
yield return www = new WWW("F:\\EditPlus 4\\Untitled2_utf8.xml");
if (www.isDone)
{
if (string.IsNullOrEmpty(www.error))
{
print(www.text);
ReadXML(www.text);
}
else
{
print(www.error);
}
}
//释放 防止占用资源
www.Dispose();
www = null;
}
//读取XML
public void ReadXML(string text)
{
//创建一个xml文档解析器
XmlDocument document = new XmlDocument();//相当于,我现在创建了一个word空白文档
// 把指定的xml格式的字符串内容加载到 文件名为document的word空白文档中
//接下来,就可以开始到文档中来取内容了,
document.LoadXml(text);
//1:先取根节点,
XmlElement root = document.DocumentElement;
print(root);
//获取所有子节点
XmlNodeList list = root.ChildNodes;
for (var i = 0; i < list.Count; i++)
{
//子节点
XmlNode node = list[i];
string name = (node as XmlElement).GetAttribute("name");
int x = int.Parse(node["x"].InnerText);
int y = int.Parse(node["y"].InnerText);
int z = int.Parse(node["z"].InnerText);
mon.Enqueue(new Monsters(name, x, y, z));
}
Monsters m1 = mon.Dequeue();
print(m1.name + "x:" + m1.x + ",y:" + m1.y + ",z:" + m1.z);
Monsters m2 = mon.Dequeue();
print(m2.name + "x:" + m2.x + ",y:" + m2.y + ",z:" + m2.z);
}
//怪物信息队列
Queue<Monsters> mon = new Queue<Monsters>();
class Monsters
{
public string name;
public int x;
public int y;
public int z;
public Monsters(string name, int x, int y, int z)
{
this.name = name;
this.x = x;
this.y = y;
this.z = z;
}
}
}
CreatXML以及修改XML:
//修改XML
public void ChangeXML()
{
//加载"E:/myXML.xml"的xml文件
XmlDocument doc = new XmlDocument();
doc.Load("E:/myXML.xml");
XmlElement root = doc.DocumentElement;
//修改属性
root["task"].SetAttribute("sex", "男");
//添加节点
XmlElement child = doc.CreateElement("task2");
root.AppendChild(child);
doc.Save("E:/myXML.xml");
}
//新建XML
public void CreatXML()
{
XmlDocument doc = new XmlDocument();
XmlElement root = doc.CreateElement("Task");
XmlElement child = doc.CreateElement("task");
child.SetAttribute("sex", "1");
doc.AppendChild(root);
root.AppendChild(child);
//保存到该目录下
doc.Save("E:/myXML.xml");
}
新建并修改后的XML文件内容: