XML讀寫
讀取一個xml文件(/Scripts/enemy.xml),得到xml內容+anykey的MD5簽名。
寫一個xml(/Scripts/enemy_bkp.xml),改ROOT爲root。
using UnityEngine;
using System.Collections;
using System.Xml;
public class xml_md5 : MonoBehaviour {
public ArrayList m_enemylist;
public class SpawnData
{
public int wave = 1;
public string enemyname = "";
public int level = 1;
public float wait = 1.0f;
}
string GetMD5(string sDataIn)
{
System.Security.Cryptography.MD5CryptoServiceProvider md5 = new System.Security.Cryptography.MD5CryptoServiceProvider();
byte[] bytValue, bytHash;
bytValue = System.Text.Encoding.UTF8.GetBytes(sDataIn);
bytHash = md5.ComputeHash(bytValue);
md5.Clear();
string sTemp = "";
for (int i = 0; i < bytHash.Length; i++)
{
sTemp += bytHash[i].ToString("X").PadLeft(2, '0');
}
return sTemp.ToLower();
}
// Use this for initialization
void Start () {
m_enemylist = new ArrayList();
// 讀取 xml
string filepath = Application.dataPath + @"/Scripts/enemy.xml";
if ( System.IO.File.Exists( filepath ) )
{
XmlDocument xmlDoc = new XmlDocument();
xmlDoc.Load(filepath);
// 得到MD5,但是沒幹鳥用
string key = "anykey";
string innerstr = xmlDoc.InnerXml + key;
string md5hash = GetMD5( innerstr );
XmlNodeList nodes = xmlDoc.SelectSingleNode("ROOT").ChildNodes;
foreach ( XmlElement e in nodes )
{
SpawnData sd = new SpawnData();
sd.wave = int.Parse( e.Attributes["wave"].Value );
sd.enemyname = e.Attributes["enemyname"].Value;
sd.level = int.Parse( e.Attributes["level"].Value );
sd.wait = float.Parse( e.Attributes["wait"].Value );
m_enemylist.Add(sd);
}
}
// 寫入 xml
string backuppath = Application.dataPath + @"/Scripts/enemy_bkp.xml";
{
XmlDocument xmlDoc = new XmlDocument();
XmlDeclaration decl = xmlDoc.CreateXmlDeclaration("1.0","UTF-8","yes");
xmlDoc.AppendChild(decl);
XmlElement root = xmlDoc.CreateElement( "root" );
xmlDoc.AppendChild(root);
for ( int i = 0; i < m_enemylist.Count; i ++ )
{
SpawnData sd = (SpawnData)m_enemylist[i];
XmlElement t = xmlDoc.CreateElement( "table" );
t.SetAttribute( "wave", sd.wave.ToString() );
t.SetAttribute( "enemyname", sd.enemyname );
t.SetAttribute( "level", sd.level.ToString() );
t.SetAttribute( "wait", sd.wait.ToString() );
root.AppendChild(t);
}
xmlDoc.Save(backuppath);
}
}
}
xml文件
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<ROOT>
<table wave="1" enemyname="boar" level="1" wait="3.1"/>
<table wave="1" enemyname="boar" level="1" wait="3"/>
<table wave="2" enemyname="boar" level="2" wait="4"/>
<table wave="2" enemyname="bird" level="2" wait="4"/>
<table wave="3" enemyname="boar" level="2" wait="3"/>
</ROOT>