1. XML:
★XML格式:
StringValue
☆解析:
Alarm(元素节点);lock(属性节点);Time(元素节点)StringValue(文本节点)
☆元素节点(Element):Alarm,Time
☆节点(Node):Alarm,lock,Time,StringValue
★XML继承结构:
System.Object
System.Xml.XmlNode(表示XML节点)
System.Xml.XmlDocument(表示XML文档)
System.Xml.XmlAttribute(表示XML属性)
System.Xml.XmlLikedNode
System.Xml.XmlElement(表示XML元素)
★XML常用类:
♥XmlAttribute——XML属性类
♥XmlNode——XML节点类
☆InnerText:获取或设置节点及其所有子节点的值。(仅元素节点拥有)
☆Value:获取或设置节点的值(仅属性节点拥有)
☆AppendChild:将指定的节点添加到该节点的子节点列表的末尾
☆ChildNodes:获取节点的所有子节点
☆FirstChild:获取节点的第一个子节点
☆HasChildNodes:判断该节点是否有任何子节点
☆InnerText:获取或设置节点及其所有子节点值
☆SelectSingleNode:选择第一个XmlNode
♥XmlDocument——XML文件夹
☆CreateXmlDeclaration:创建一个具有指定值的XmlDeclaration节点
☆CreateElement:创建具有指定名称的元素
☆CreateNode:创建具有指定的节点类型、Name和NamespaceURI和XmlNode
☆AppendChild:将指定的节点添加到该节点的子节点列表末尾(继承自XmlNode)
☆Load:从指定的URL加载XML文档
☆LoadXml:从指定的字符串加载XML文档
☆Save:将XML文档保存到指定的文件夹。
♥:XmlElement: ——XML元素类
☆SetAttribute:设置指定名称的特性的值
☆HasAttribute:判断该元素节点是否具有属性
☆GetAttribute:返回具有指定名称的属性值
★XML数据生成步骤:(Unity引擎)
第一步:引用C#的命名空间System.Xml
第二步:生成XML文档(XmlDocument)
第三步:生成根元素(XmlElement类)添加给文档对象
第四步:循环生成子元素添加给父元素
第五步:将生成的XML文档保存
★实例:
C#脚本:
#region 用到的函数
/* Application:访问应用程序运行时数据。
* dataPath:包含游戏数据文件夹的路径(只读)。
* File.Exists(string path):判断是文件路径是否存在
* .CreateXmlDeclaration(string version,string encoding,string standalone): 创建声明某文档
* .SelectNodes(选择某节点所有子节点元素)
* .SelectSingleNode().ChildNode (选择某个节点).(子节点元素)
* XmlDocument: xml文档
* XmlNode : xml节点
* XmlElement:xml元素
* .CreateElement(strin name) : 创建xml元素
* .SetAttribute(string name,string value) :写属性
* ApendChild(XmlNode NewChild):添加孩子
* .InnerText{get;set;} : (属性)string类型。 某元素.文本节点
* AsseteDatabase.Refresh(); : 更新 资源数据库
* .Save(path); 保存某文档;
* .Load(path); 得到(加载)某文档
* XmlNodeList :节点列表
* .Equals(string value) 某值等于value 等同于 ==
*/
#endregion
/*************************
* Title: ""
*
* Function:
*
* Author: v.
* Date: 2018.
* Version: 1.0
* Description:
*
*************************/
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using System.IO;
using System.Xml;
#if UNITY_EDITOR
using UnityEditor;
#endif
public class Data_XML : MonoBehaviour
{
private string path;
void Start()
{
path = Application.dataPath + "/1.XML/XMLData/ChatData.xml";
}//end_Start
void Update()
{
if (Input.GetKeyDown(KeyCode.A))
{
CreateXML();
}
if (Input.GetKeyDown(KeyCode.B))
{
AddXML();
}
if (Input.GetKeyDown(KeyCode.C))
{
UpDataXML();
}
}//end_Update
///
/// 创建XML
///
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("object");
//将根节点添加到xml当中
doc.AppendChild(root);
//创建子节点
XmlElement element01 = doc.CreateElement("message");
//给子节点设置属性
element01.SetAttribute("id", "1001");
//添加到根节点中
root.AppendChild(element01);
//创建子节点0101
XmlElement element0101 = doc.CreateElement("content");
//给子节点0101添加元素属性
element0101.SetAttribute("name", "The1");
//001添加文本节点
element0101.InnerText = "嗨,少年,你醒了吗?";
//将子节点添加到01节点当中
element01.AppendChild(element0101);
////给子节点添加文本节点
//element01.InnerText = "";
//创建子节点0102....
XmlElement element0102 = doc.CreateElement("mission");
element0102.SetAttribute("name", "The2");
element0102.InnerText = "我是谁,我在哪里?";
element01.AppendChild(element0102);
//保存成一个真正的文档
doc.Save(path);
#if UNITY_EDITOR
AssetDatabase.Refresh();
#endif
}
else
{
print("文件已存在");
}
}
///
/// 添加
///
void AddXML()
{
#if UNITY_EDITOR
AssetDatabase.Refresh();
#endif
if (!File.Exists(path))
{
return;
}
else
{
XmlDocument doc = new XmlDocument();
//加载指定路径的xml文件
doc.Load(path);
//找到根节点
XmlNode root=doc.SelectSingleNode("object");
XmlElement e = doc.CreateElement("message01");
e.SetAttribute("id","1002");
root.AppendChild(e);
XmlElement e1 = doc.CreateElement("content01");
e1.SetAttribute("name","The3");
e1.InnerText = "啊,头好疼";
e.AppendChild(e1);
XmlElement e2 = doc.CreateElement("content02");
e2.SetAttribute("name","The4");
e2.InnerText = "想起来了,是他把我推下了悬崖";
e.AppendChild(e2);
doc.Save(path);
#if UNITY_EDITOR
AssetDatabase.Refresh();
#endif
}
}
///
/// 更新
///
void UpDataXML()
{
if (!File.Exists(path))
{
return;
}
XmlDocument doc = new XmlDocument();
doc.Load(path);
//得到object里所有的子节点
//XmlNodeList xmlNodes = doc.SelectNodes("object");
XmlNodeList xmlNode = doc.SelectSingleNode("object").ChildNodes;
foreach (XmlElement xe in xmlNode)
{
if (xe.GetAttribute("id") == "1001")
{
xe.SetAttribute("id","1010");
foreach (XmlElement xe01 in xe.ChildNodes)
{
if (xe01.GetAttribute("name").Equals("The2"))
{
xe01.InnerText="没想到一觉醒来,以前的事情都忘了";
}
}
}
}
doc.Save(path);
}
///
/// 读取
///
void ReadXML()
{
if (!File.Exists(path))
{
return;
}
//创建集合
ArrayList al01 = new ArrayList();
ArrayList al02 = new ArrayList();
XmlDocument doc = new XmlDocument();
//得到xml文件
doc.Load(path);
//得到根节点下所有的子节点
XmlNodeList nodes = doc.SelectSingleNode("object").ChildNodes;
//遍历所有的子节点
foreach (XmlElement ex in nodes)
{
if (ex.GetAttribute("id").Equals("1001"))
{
foreach (XmlElement ex01 in ex.ChildNodes)
{
if (ex01.Name == "contents")
{
al01.Add(ex01.GetAttribute("name")+":"+ex01.InnerText);
print(al01[0]);
}
if (ex01.GetAttribute("name") == "The2")
{
al02.Add(ex01.GetAttribute("name") + ":" + ex01.InnerText);
print(al02[0]);
}
}
}
}
}
}
脚本运行后的XML文档