Unity各类数据库的基本操作(四)-- XML
来源:互联网 发布:个性化菜单 软件 编辑:程序博客网 时间:2024/05/29 17:06
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_Startvoid 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_EDITORAssetDatabase.Refresh();#endif}}/// <summary>/// 解析XML/// </summary>void LoadXML(){if (!File.Exists(path)){return;}//创建一个xml的对象XmlDocument doc = new XmlDocument();//会下载path路径下的xml文件(获得),此时doc = pathdoc.Load (path);//得到objects底下的所有子节点.SelectSingleNode是获得所有子节点XmlNodeList xmlNodeList = doc.SelectSingleNode("objects").ChildNodes;//遍历xmlNodeList的所有的子节点,(也就一个massages)foreach (XmlElement xe_01 in xmlNodeList) {//如果遍历到的massages的id = 1101if (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_EDITORAssetDatabase.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);}}}
- Unity各类数据库的基本操作(四)-- XML
- Unity各类基础数据库的基本操作(一)
- Unity各类数据库的基本操作(二)-- CSV
- Unity各类数据库的基本操作(三)-- JSON
- Unity各类数据库的基本操作(五)-- PlayerPrefs
- Unity各类数据库的基本操作(六)-- SQLite
- unity之数据库的基本操作
- 四、对数据库的基本操作
- Jedis的基本操作-各类数据
- unity之数据库的基本操作和arrylist
- 四种xml操作方式的基本使用方法
- 四种XML操作方式的基本使用方法
- java 四种xml操作方式的基本使用方法
- 四种xml操作方式的基本使用方法
- Unity学习之数据库基本操作
- unity界面的基本操作
- XML的基本操作!
- XML的基本操作
- POJ 1789 Truck History 最小生成树
- BaseActivity中封装通用的Toolbar
- 逻辑Logistic回归原理和实现
- CSDNruh
- 使用github搭建自己的个人网站(装逼指南)
- Unity各类数据库的基本操作(四)-- XML
- CPU卡程序设计实例(十五)数据校验
- 在kali2虚拟机上第一次成功运行snort和barnyard2
- Android ViewPager使用
- hibernate和JDBC
- 欢迎使用CSDN-markdown编辑器
- CSS3--一些属性
- Windows 环境下载 Android 源码
- thinking in java(day1)--equals方法