/// <summary> /// 递归解析(无法读取基础类型意外的数据) /// </summary> /// <returns>The data.</returns> /// <typeparam name="T">The 1st type parameter.</typeparam> static T ParsingData <T>(XmlNode parentNode, T data) where T : class, IData <T> { string format = parentNode.Attributes["format"].Value; string value = parentNode.Attributes["value"].Value; T childData = DataTool.ParsingFormat <T>(parentNode.Name, format, value, data); foreach (XmlNode node in parentNode.ChildNodes) { ParsingData <T>(node, childData); } return(data); }
/// <summary> /// 通过字符串读取xml格式文件 /// </summary> /// <param name="data">Data.</param> /// <param name="stream">Stream.</param> /// <typeparam name="T">The 1st type parameter.</typeparam> public static void LoadDataWihtStream <T>(ref T data, string stream) where T : class, IData <T> { XmlDocument xmlDoc = new XmlDocument(); xmlDoc.LoadXml(stream); // 创建根节点 XmlNode root = xmlDoc.FirstChild; data.Key = root.Name; string format = root.Attributes["format"].Value; string value = root.Attributes["value"].Value; DataTool.ParsingFormat <T>(format, value, data); // 创建子节点 foreach (XmlNode node in root.ChildNodes) { ParsingData <T>(node, data); } }
/// <summary> /// 解析CSV内容 /// </summary> /// <returns>The csv.</returns> /// <param name="content">Content.</param> /// <param name="data">Data.</param> /// <typeparam name="T">The 1st type parameter.</typeparam> static T ParsingCsv <T>(T data, string content) where T : class, IData <T> { /* CSV文件必须遵循以下格式 * -------------------------------------------------------------------------------- * ID | Type1 Type2 Type3 Type4 ... *--------------------------------------------------------------------------------- * uint | format format format format *--------------------------------------------------------------------------------- * 00001 | xxxx xxxx xxxx xxxx *--------------------------------------------------------------------------------- * 00002 | xxxx xxxx xxxx xxxx *--------------------------------------------------------------------------------- * ... */ // 消除回车键 if (content.EndsWith("\n")) { content = content.Substring(0, content.Length - 1); } // 将字符串分组 string[] line = content.Split(new string[] { "\r\n" }, StringSplitOptions.None); string[] names = line[0].Split(","[0]); string[] formats = line[1].Split(","[0]); for (int i = 2; i < line.Length; i++) { string[] values = line[i].Split(","[0]); T node = data.CreatChildData(values[0].ToString(), uint.Parse(values[0])); for (int j = 1; j < values.Length; j++) { DataTool.ParsingFormat <T>(names[j], formats[j], values[j], node); //GameCommon.GameCommon.Log(values[j]); } } return(null); }