XML:
格式:
<?头文件?>
<根节点名 键 = “值”>
<子节点名>
<子节点名>
<子节点名> 内容 </子节点名>
<子节点名> 内容 </子节点名>
</子节点名>
<子节点名>
<子节点名><子节点名> 内容 </子节点名>
<子节点名> 内容 </子节点名>
</子节点名>
</根节点名>
1.MAC系统,在Unity工程目录新建C#脚本,右击找到文件位置改后缀名
:
试着写入下面见识面板里的内容:
注释:<!--内容-->
<? xml version = "1.0" encoding = "UTF-8" ?><!--头文件-->
<GameObject name = "Cube">
<Transform>
<position>
<x>0</x>
<y>0</y>
<z>0</z>
</position>
<Rotation>
<x>0</x>
<y>0</y>
<z>0</z>
</Rotation>
<Scale>
<x>1</x>
<y>1</y>
<z>1</z>
</Scale>
</Transform>
<BoxCollider>
<isTrigger>false</isTrigger>
<Material>null</Material>
<Center>
<x>0</x>
<y>0</y>
<!--<z>0</z>注释的方法-->
</Center>
<Size>
<x>1</x>
<y>1</y>
<z>1</z>
</Size>
</BoxCollider>
</GameObject>
2.在Unity中使用C#脚本对XML文件进行操作:
注意引用明明空间;
using System.Xml;
using System.IO;
using UnityEditor;//编辑器的命名空间
(1)创建XML文档
void Start ()
{
path = Application.dataPath + "/4.xml/XMLData/ChatData01.xml";
}
void Update ()
{
if (Input.GetKeyDown(KeyCode.C)) {
CreateXML ();
}
}
/// <summary>
/// 创建xml文档
/// </summary>
void CreateXML(){
//如果文件不存在
if (!File.Exists(path))
{
//创建xml文档对象
XmlDocument doc = new XmlDocument ();
//创建xml头文件
XmlNode xmlHead = doc.CreateXmlDeclaration("1.0","UTF-8",null);
//添加头到xml文档里
doc.AppendChild(xmlHead);
//创建根节点(最上一层的)
XmlElement root = doc.CreateElement("objects");
//创建子节点
XmlElement element = doc.CreateElement("massages");
//设置子节点的属性
element.SetAttribute("id","1101");
XmlElement element01 = doc.CreateElement ("contents");
element01.SetAttribute ("name", "The1");
element01.InnerText = "嗨!骚年,你醒了?";
XmlElement element02 = doc.CreateElement ("missions");
element02.SetAttribute ("name", "The2");
element02.InnerText = "我是谁,我这是在哪里?";
//把添加子节点放到一起,一层一层的添加,不容易出错
//添加根节点到xml文档
doc.AppendChild (root);
//在根节点下添加子节点
root.AppendChild(element);
//在element(massages)目录下添加子节点
element.AppendChild (element01);
//再在element(massages)目录下添加一个子节点
element.AppendChild (element02);
//保存生成真正的文档
doc.Save (path);
//刷新视图
#if UNITY_EDITOR
AssetDatabase.Refresh();
#endif
}
}
(2)解析XML doc.Load (path);//下载指定路径下已经建立好的,或者导入的XML文档
string path ;
private ArrayList ALThe1 = new ArrayList();
private ArrayList ALThe2 = new ArrayList();
void Start ()
{
path = Application.dataPath + "/4.xml/XMLData/ChatData01.xml";
}
void Update ()
{
if (Input.GetKeyDown(KeyCode.L)) {
LoadXML ();
}
}
/// <summary>
/// 解析XML
/// </summary>
void LoadXML()
{
if (!File.Exists(path))
{
return;
}
//创建一个xml的对象
XmlDocument doc = new XmlDocument();
//会下载path路径下的xml文件(获得),此时doc = path
doc.Load (path);
//得到objects底下的所有子节点.SelectSingleNode是获得所有子节点
XmlNodeList xmlNodeList = doc.SelectSingleNode("objects").ChildNodes;
//遍历xmlNodeList的所有的子节点,(也就一个massages)
foreach (XmlElement xe_01 in xmlNodeList) {
//如果遍历到的massages的id = 1101
if (xe_01.GetAttribute("id").Equals("1101")) {
//继续遍历id是1101的节点(massages)下的子节点
foreach (XmlElement xe_02 in xe_01.ChildNodes)
{
//得到name是The1的节点里面的内容,放到ArrayList中
if (xe_02.GetAttribute("name").Equals("The1")) {
ALThe1.Add (xe_02.GetAttribute ("name") + ":" + xe_02.InnerText);
print ("ALThe1添加了:" + xe_02.GetAttribute ("name") + ":" + xe_02.InnerText);
}
//得到name是The2的节点里面的内容,放到另一个ArrayList中
if (xe_02.GetAttribute("name").Equals("The2")) {
ALThe2.Add (xe_02.GetAttribute ("name") + ":" + xe_02.InnerText);
print ("ALThe2添加了:" + xe_02.GetAttribute("name") + ":" + xe_02.InnerText);
}
}
}
}
}
(3)更新XML文档里的内容:
void Start ()
{
path = Application.dataPath + "/4.xml/XMLData/ChatData01.xml";
}
void Update ()
{
if (Input.GetKeyDown(KeyCode.U)) {
UpdataXML ();
}
}
/// <summary>
/// 更新
/// </summary>
void UpdataXML()
{
if (!File.Exists (path)) {
print ("文件不存在");
return;
}
XmlDocument doc = new XmlDocument ();
doc.Load (path);
//得到objects地下所有的节点
XmlNodeList xmlNodeList = doc.SelectSingleNode ("objects").ChildNodes;
foreach (XmlElement xe_01 in xmlNodeList) {
if (xe_01.GetAttribute("id").Equals("1101")) {
xe_01.SetAttribute ("id","1010");
foreach (XmlElement xe_02 in xe_01.ChildNodes) {
if (xe_02.GetAttribute("name") == "The2") {
//将missions的属性改成The3;
xe_02.SetAttribute("name","The3");
//更改内容
xe_02.InnerText = "没想到一觉醒来,什么事都忘了";
}
}
}
}
//保存刷新
doc.Save (path);
#if UNITY_EDITOR
AssetDatabase.Refresh();
#endif
}
(4)添加内容
void Start ()
{
path = Application.dataPath + "/4.xml/XMLData/ChatData01.xml";
}
void Update ()
{
if (Input.GetKeyDown(KeyCode.A)) {
AddXML ();
}
}
/// <summary>
/// 添加
/// </summary>
void AddXML()
{
if (!File.Exists (path)) {
print ("文件不存在");
} else {
XmlDocument doc = new XmlDocument ();
doc.Load (path);
XmlNode root = doc.SelectSingleNode ("objects");
//
XmlElement element = doc.CreateElement("messages");
element.SetAttribute ("id", "1002");
XmlElement element_1 = doc.CreateElement ("contents_01");
element_1.SetAttribute ("name", "The4");
//设置子节点里面的内容
element_1.InnerText = "啊!头好疼";
XmlElement element_2 = doc.CreateElement ("contents_03");
element_2.SetAttribute ("name","The5");
element_2.InnerText = "我想起来了,没想到是他!";
root.AppendChild (element);
element.AppendChild (element_1);
element.AppendChild (element_2);
doc.Save (path);
}
}
完整代码:
using UnityEngine;
using System.Collections;
using System.Xml;
using System.IO;
using UnityEditor;//编辑器的命名空间
public class Data_XML : MonoBehaviour
{
string path ;
private ArrayList ALThe1 = new ArrayList();
private ArrayList ALThe2 = new ArrayList();
void Start ()
{
path = Application.dataPath + "/4.xml/XMLData/ChatData01.xml";
}//end_Start
void Update ()
{
if (Input.GetKeyDown(KeyCode.C)) {
CreateXML ();
}
if (Input.GetKeyDown(KeyCode.L)) {
LoadXML ();
}
if (Input.GetKeyDown(KeyCode.U)) {
UpdataXML ();
}
if (Input.GetKeyDown(KeyCode.A)) {
AddXML ();
}
}//end_Update
/// <summary>
/// 创建xml文档
/// </summary>
void CreateXML(){
//如果文件不存在
if (!File.Exists(path))
{
//创建xml文档对象
XmlDocument doc = new XmlDocument ();
//创建xml头文件
XmlNode xmlHead = doc.CreateXmlDeclaration("1.0","UTF-8",null);
//添加头到xml文档里
doc.AppendChild(xmlHead);
//创建根节点(最上一层的)
XmlElement root = doc.CreateElement("objects");
//添加根节点到xml文档
// doc.AppendChild (root);
//创建子节点
XmlElement element = doc.CreateElement("massages");
//设置子节点的属性
element.SetAttribute("id","1101");
//在根节点下添加子节点
// root.AppendChild(element);
XmlElement element01 = doc.CreateElement ("contents");
element01.SetAttribute ("name", "The1");
element01.InnerText = "嗨!骚年,你醒了?";
//在element(massages)目录下添加子节点
// element.AppendChild (element01);
XmlElement element02 = doc.CreateElement ("missions");
element02.SetAttribute ("name", "The2");
element02.InnerText = "我是谁,我这是在哪里?";
//再在element(massages)目录下添加一个子节点
// element.AppendChild (element02);
//把添加子节点放到一起,一层一层的添加,不容易出错
//添加根节点到xml文档
doc.AppendChild (root);
//在根节点下添加子节点
root.AppendChild(element);
//在element(massages)目录下添加子节点
element.AppendChild (element01);
//再在element(massages)目录下添加一个子节点
element.AppendChild (element02);
//保存生成真正的文档
doc.Save (path);
//刷新视图
#if UNITY_EDITOR
AssetDatabase.Refresh();
#endif
}
}
/// <summary>
/// 解析XML
/// </summary>
void LoadXML()
{
if (!File.Exists(path))
{
return;
}
//创建一个xml的对象
XmlDocument doc = new XmlDocument();
//会下载path路径下的xml文件(获得),此时doc = path
doc.Load (path);
//得到objects底下的所有子节点.SelectSingleNode是获得所有子节点
XmlNodeList xmlNodeList = doc.SelectSingleNode("objects").ChildNodes;
//遍历xmlNodeList的所有的子节点,(也就一个massages)
foreach (XmlElement xe_01 in xmlNodeList) {
//如果遍历到的massages的id = 1101
if (xe_01.GetAttribute("id").Equals("1101")) {
//继续遍历id是1101的节点(massages)下的子节点
foreach (XmlElement xe_02 in xe_01.ChildNodes)
{
//得到name是The1的节点里面的内容,放到ArrayList中
if (xe_02.GetAttribute("name").Equals("The1")) {
ALThe1.Add (xe_02.GetAttribute ("name") + ":" + xe_02.InnerText);
print ("ALThe1添加了:" + xe_02.GetAttribute ("name") + ":" + xe_02.InnerText);
}
//得到name是The2的节点里面的内容,放到另一个ArrayList中
if (xe_02.GetAttribute("name").Equals("The2")) {
ALThe2.Add (xe_02.GetAttribute ("name") + ":" + xe_02.InnerText);
print ("ALThe2添加了:" + xe_02.GetAttribute("name") + ":" + xe_02.InnerText);
}
}
}
}
}
/// <summary>
/// 更新
/// </summary>
void UpdataXML()
{
if (!File.Exists (path)) {
print ("文件不存在");
return;
}
XmlDocument doc = new XmlDocument ();
doc.Load (path);
//得到objects地下所有的节点
XmlNodeList xmlNodeList = doc.SelectSingleNode ("objects").ChildNodes;
foreach (XmlElement xe_01 in xmlNodeList) {
if (xe_01.GetAttribute("id").Equals("1101")) {
xe_01.SetAttribute ("id","1010");
foreach (XmlElement xe_02 in xe_01.ChildNodes) {
if (xe_02.GetAttribute("name") == "The2") {
//将missions的属性改成The3;
xe_02.SetAttribute("name","The3");
//更改内容
xe_02.InnerText = "没想到一觉醒来,什么事都忘了";
}
}
}
}
//保存刷新
doc.Save (path);
#if UNITY_EDITOR
AssetDatabase.Refresh();
#endif
}
/// <summary>
/// 添加
/// </summary>
void AddXML()
{
if (!File.Exists (path)) {
print ("文件不存在");
} else {
XmlDocument doc = new XmlDocument ();
doc.Load (path);
XmlNode root = doc.SelectSingleNode ("objects");
//
XmlElement element = doc.CreateElement("messages");
element.SetAttribute ("id", "1002");
XmlElement element_1 = doc.CreateElement ("contents_01");
element_1.SetAttribute ("name", "The4");
//设置子节点里面的内容
element_1.InnerText = "啊!头好疼";
XmlElement element_2 = doc.CreateElement ("contents_03");
element_2.SetAttribute ("name","The5");
element_2.InnerText = "我想起来了,没想到是他!";
root.AppendChild (element);
element.AppendChild (element_1);
element.AppendChild (element_2);
doc.Save (path);
}
}
}