一、XML基础知识
1、简介
XML全称Extensible Markup Language,是一种可拓展的语言,主要作用是用来存取数据的,同时是国际通用的一种特殊格式,存取不受不同平台的影响;后缀为.xml,常见的文本编辑器都可以打开XML,我个人一般都是直接使用IDE打开的
2、创建
首先在桌面上创建一个文本文件,之后将文本文件的后缀修改成.xml,一个xml文件就创建完了。
3、构成
二、C#对于XML文件的操作
1、创建XML文件
编辑XML相关代码需要引用命名空间:System.Xml;
/// <summary>
/// 创建Xml文件
/// </summary>
/// <param name="savePath">保存xml文件的路径</param>
/// <param name="nodeInfoDic">节点信息字典(节点名和节点内容)</param>
/// <param name="nodeAttributeDic">节点特性字典(节点特性名和特性内容)</param>
void CreateXmlFile(string savePath, Dictionary<string, string> nodeInfoDic,
Dictionary<string, string> nodeAttributeDic)
{
XmlDocument xmlDocument = new XmlDocument(); //创建一个Xml文档对象
XmlDeclaration xmlDeclaration = xmlDocument.CreateXmlDeclaration("1.0", "UTF-8", ""); //给xml文件添加xml版本和文本格式
xmlDocument.AppendChild(xmlDeclaration); //将创建的第一行的内容插入到xml文件中
XmlElement rootNode = xmlDocument.CreateElement("RootNode"); //创建根节点
xmlDocument.AppendChild(rootNode); //将根节点插入到xml文件中
foreach (KeyValuePair<string, string> nodeInfo in nodeInfoDic) //遍历节点内容字典,设置节点的名字以及内容
{
XmlElement tempNode = xmlDocument.CreateElement(nodeInfo.Key);
tempNode.InnerText = nodeInfo.Value;
foreach (KeyValuePair<string, string> nodeAttribute in nodeAttributeDic) //遍历节点属性字典,设置节点的属性名以及内容
{
if (!string.IsNullOrEmpty(nodeAttribute.Key))
{
tempNode.SetAttribute(nodeAttribute.Key, nodeAttribute.Value);
}
}
}
xmlDocument.Save(savePath);
}
2、读取XML文件
读取xml文件理解可以参考树,首先要确定根节点,然后找到所需节点,获取改节点的内容和属性等;具体实现可以参考下列代码:
/// <summary>
/// 读取Xml文件
/// </summary>
/// <param name="readPath"></param>
void ReadXmlFile(string readPath)
{
XmlDocument xmlDocument = new XmlDocument(); //创建一个xml文本对象
xmlDocument.Load(readPath); //加载需要读取的xml对象
XmlNode rootNode = xmlDocument.SelectSingleNode("RootNode"); //加载根节点
XmlNodeList xmlNodeList = rootNode.SelectNodes("需要查找的节点名(多个),如果查找单个节点可以参考查找根节点");
foreach (XmlNode xmlNode in xmlNodeList)
{
Debug.LogError(xmlNode.InnerText);
Debug.LogError(xmlNode.Attributes["特性名"].Value);
}
}
三、XML序列化
1、序列化与反序列化简介
个人理解:序列化就是将对象信息存储在配置文件中;反序列化就是从配置文件中读取对象信息
2、实现XML序列化与反序列化
/// <summary>
/// 保存数据
/// </summary>
/// <param name="savePath">保存数据的路径</param>
/// <param name="obj">需要保存数据的对象</param>
void SaveXMLData(string savePath, Object obj)
{
XmlSerializer xmlSerializer = new XmlSerializer(obj.GetType());
StreamWriter streamWriter = new StreamWriter(savePath);
xmlSerializer.Serialize(streamWriter,obj);
}
/// <summary>
/// 加载数据
/// </summary>
/// <param name="loadPath"></param>
void LoadXMLData(string loadPath)
{
XmlSerializer xmlSerializer = new XmlSerializer(typeof(Type));//其中Type是需要解析的对象的类型
StreamReader streamReader = new StreamReader(loadPath);
xmlSerializer.Deserialize(streamReader);
}
四、总结
1、xml序列化不支持字典序列化
2、在使用序列化和反序列化的时候也可以使用using来进行垃圾回收
3、本文主要是记录C#对于XML文件的操作,如有错误希望大佬们指出,我会及时修改