创建XML
CreateElement 创建XML元素
SetAttribute 设置属性
InnerText 获取或设置节点及其所有子节点的串联值。
AppendChild 将指定的节点添加到该节点的子节点列表的末尾
Save 将 XML 文档保存到指定的位置
创建一下XML文件(xml文件的基本格式)
<root_CharacterTemplateData>
<CharacterTemplateData id="0" name="xml">
<JobID>1</JobID>
<JobMode>none</JobMode>
<InitForce>1.1</InitForce>
</CharacterTemplateData>
</root_CharacterTemplateData>
常用操作
using UnityEngine;
using System.Collections;
using System.IO;
using System.Xml;
public class TestXML : MonoBehaviour {
private string filePath;
private int id;
private int jobId;
private void Start()
{
// filePath = Application.dataPath + "/Test.xml";
filePath = Application.streamingAssetsPath + "/Test.xml";
}
/// <summary> /// 创建XML文件 /// </summary>
private void CreateXML()
{
//检查xml是否存在,如果没有文件则创建
if(File.Exists(filePath)) return;
//创建xml实例
XmlDocument xmlDoc = new XmlDocument ();
//创建根节点
XmlElement root = xmlDoc.CreateElement("root_CharacterTemplateData");
//创建一级子节点
XmlElement elmNew = xmlDoc.CreateElement("CharacterTemplateData");
//设置两个属性
elmNew.SetAttribute("id","0");
elmNew.SetAttribute ("name","xml");
//创建二级节点
XmlElement jobID = xmlDoc.CreateElement("JobID");
//设置二级节点值
jobID.InnerText = "1";
//在一级节点中追加二级节点
elmNew.AppendChild(jobID);
XmlElement jobMode = xmlDoc.CreateElement ("JobMode");
jobMode.InnerText = "none";
elmNew.AppendChild (jobMode);
XmlElement initForce = xmlDoc.CreateElement ("InitForce");
initForce.InnerText = "1.1";
elmNew.AppendChild (initForce);
//在跟节点中追加一级节点
root.AppendChild(elmNew);
//在xml实例中追加根节点
xmlDoc.AppendChild(root);
//保存xml文件
xmlDoc.Save(filePath);
}
/// <summary> /// 追加XML数据 /// </summary>
private void AddXML()
{
//检测文件是否存在
if(!File.Exists(filePath)) return;
//创建实例
XmlDocument xmlDoc = new XmlDocument ();
//查找根节点
xmlDoc.Load(filePath);
XmlNode root = xmlDoc.SelectSingleNode ("root_CharacterTemplateData");
//添加节点
XmlElement elmNew = xmlDoc.CreateElement("CharacterTemplateData");
elmNew.SetAttribute ("id","1");
elmNew.SetAttribute ("name","name1");
XmlElement jobId = xmlDoc.CreateElement ("JobID");
jobId.InnerText = "1";
elmNew.AppendChild (jobId);
XmlElement jobMode = xmlDoc.CreateElement ("JobMode");
jobMode.InnerText = "none";
elmNew.AppendChild (jobMode);
XmlElement initForce = xmlDoc.CreateElement ("InitForce");
initForce.InnerText = "2.2";
elmNew.AppendChild (initForce);
root.AppendChild (elmNew);
// xmlDoc.AppendChild (root);
xmlDoc.Save(filePath);
//在根节点中添加所有新节点
//保存XML文件
}
/// <summary> /// 更新xml数据 /// </summary>
private void UpdateXML()
{
//检测文件
if(!File.Exists(filePath)) return;
//读取实例
XmlDocument xmlDoc = new XmlDocument ();
xmlDoc.Load (filePath);
//获取根节点下所有子节点
XmlNodeList nodeList =
xmlDoc.SelectSingleNode("root_CharacterTemplateData").ChildNodes;
//遍历所有子节点,节点名称为CharacterTemplateData并且属性id=0,修改属性
foreach(XmlElement xe in nodeList)
{
if (xe.Name == "CharacterTemplateData" &&
xe.GetAttribute ("id") == "0") {
xe.SetAttribute ("id","1000");
//修改该节点的子节点,节点名称为JobID=2
xe.SelectSingleNode("JobID").InnerText = "2";
}
}
//保存
xmlDoc.Save(filePath);
}
/// <summary> /// 删除XML数据 /// </summary>
private void DeleteXML()
{
if (!File.Exists (filePath))
return;
XmlDocument xmlDoc = new XmlDocument ();
xmlDoc.Load (filePath);
XmlNodeList nodeList =
xmlDoc.SelectSingleNode ("root_CharacterTemplateData").ChildNodes;
foreach(XmlElement xe in nodeList)
{
if (xe.Name == "CharacterTemplateData" &&
xe.GetAttribute ("id") == "1") {
xe.RemoveAttribute ("id");
xe.SelectSingleNode ("JobID").InnerText = "";
}
}
xmlDoc.Save (filePath);
}
/// <summary> /// 显示xml数据 /// </summary>
private void ShowXML()
{
if (!File.Exists (filePath))
return;
XmlDocument xmlDoc = new XmlDocument ();
xmlDoc.Load (filePath);
XmlNodeList nodeList =
xmlDoc.SelectSingleNode ("root_CharacterTemplateData").ChildNodes;
foreach(XmlElement xe in nodeList)
{
if (xe.Name == "CharacterTemplateData" &&
xe.GetAttribute ("id") == "1000") {
id = int.Parse(xe.GetAttribute ("id"));
jobId = int.Parse(xe.SelectSingleNode ("JobID").InnerText);
}
}
}
private void OnGUI()
{
if (GUI.Button (new Rect (100, 110, 200, 30), "CreateXML"))
CreateXML ();
if (GUI.Button (new Rect (100, 150, 200, 30), "AddXML"))
AddXML ();
if (GUI.Button (new Rect (100, 190, 200, 30), "UpdateXML"))
UpdateXML ();
if (GUI.Button (new Rect (100, 230, 200, 30), "DeleteXML"))
DeleteXML ();
if (GUI.Button (new Rect (100, 270, 200, 30), "ShowXML"))
ShowXML ();
GUILayout.Label ("id:" + id);
GUILayout.Label ("jobid:" + jobId);
GUILayout.Label ("filePath:" + filePath);
}
}
移动端 数据存在于沙盒之中 没有真实的物理地址,