/// <summary> /// 将指定目录下的xml转成cs文件 /// </summary> /// <param name="inPath">xml所在路径</param> /// <param name="inFolderName">根节点名</param> /// <param name="inNameSpace">命名空间</param> /// <param name="inHeritNames">继承</param> /// <returns></returns> public bool Xml2CS(string inPath, string inFolderName, string inRootName, string inNameSpace, string inHeritNames) { Assist.CheckFolderExist(inFolderName); Dictionary <string, XmlDocument> doc = Assist.GetXml(inPath); foreach (KeyValuePair <string, XmlDocument> item in doc) { XmlUnit b = new XmlUnit(inNameSpace, item.Key, inFolderName); b.SetInherit(inHeritNames); b.SetNodeValue(item.Value.SelectSingleNode(inRootName).ChildNodes[0]); } return(true); }
/// <summary> /// 将指定目录下的xml转成ProtocolBuffer解析类 /// </summary> /// <param name="inPath"></param> /// <param name="inFolderName"></param> /// <param name="inRootName"></param> /// <returns></returns> public bool ProtocolBufferXml(string inPath, string inFolderName, string inRootName) { Assist.CheckFolderExist(inFolderName); Dictionary <string, XmlDocument> doc = Assist.GetXml(inPath); foreach (KeyValuePair <string, XmlDocument> item in doc) { XmlNode rootNode = item.Value.SelectSingleNode(inRootName); for (int i = 0; i < rootNode.ChildNodes.Count; i++) { XmlNode n = rootNode.ChildNodes[i]; XmlToCSharp pbxu = new XmlToCSharp("", n.Name, inFolderName); pbxu.SetValue(n.Attributes); } } return(true); }
/// <summary> /// Excel -> 二进制文件 /// </summary> /// <param name="inPath"></param> /// <param name="inFolderName"></param> /// <returns></returns> public bool Bin(string inPath, string inFolderName) { Assist.CheckFolderExist(inFolderName); PBData data = new PBData(); Assist.GetObjPaths(".xls", inPath).ForEach(delegate(string path) { DataSet ds = Assist.ExcelToData(path); DataTable dt = ds.Tables[0]; string classname = Stringer.FirstLetterUp(dt.TableName); Type classType = Type.GetType(classname); FieldInfo fieldInfo = typeof(PBData).GetField(classname + "Dic"); IDictionary fieldValue = fieldInfo.GetValue(data) as IDictionary; if (classType != null) { for (int i = 4; i < dt.Rows.Count; i++) { string key = ""; // key List <string> ls = new List <string>(); for (int x = 0; x < dt.Columns.Count; x++) { ls.Add(dt.Rows[i][x].ToString()); if (dt.Rows[2][x].ToString().Split('+')[2] == "1")// 当前值为Key值的一部分 { key += dt.Rows[i][x].ToString() + "_"; } } key = key.Remove(key.Length - 1, 1); IProtoBufable value = Activator.CreateInstance(classType) as IProtoBufable;// value value.Set(ls); fieldValue.Add(key, value); } fieldInfo.SetValue(data, fieldValue); } }); #region SceneLayout 读取同级目录下的“Excel/SceneLayout/”内的所有 xml 文件,并将其数据写入 PBData Dictionary <string, XmlDocument> doc = Assist.GetXml(Assist.RootPath + "Excel/SceneLayout/"); foreach (KeyValuePair <string, XmlDocument> item in doc) { SceneLayout sl = new SceneLayout(); XmlNodeList xcc = item.Value.SelectSingleNode("Config").ChildNodes; for (int i = 0; i < xcc.Count; i++) { SceneLayoutItem sli = new SceneLayoutItem(); IProtoBufable xmlItemValue = new SceneLayoutItem() as IProtoBufable;// value List <string> xls = new List <string>(); for (int x = 0; x < xcc[i].Attributes.Count; x++) { xls.Add(xcc[i].Attributes[x].Value); } xmlItemValue.Set(xls); sl.item.Add(xmlItemValue as SceneLayoutItem); } data.SceneLayoutDic.Add(item.Key, sl); } #endregion using (var file = System.IO.File.Create("PBData")) { try { ProtoBuf.Serializer.Serialize(file, data); } catch (Exception e) { MainWindow.Show(e.ToString()); } } return(true); }
/// <summary> /// Excel -> .cs /// </summary> /// <param name="inFolderPath">输出文件夹名</param> /// <param name="suffixName">文件后缀名</param> /// <param name="inNameSpace">命名空间</param> /// <param name="inHeritNames">继承</param> /// <returns></returns> public bool Excel(string inPath, string inFolderName, string suffixName, string inNameSpace = "", string inHeritNames = "") { Assist.CheckFolderExist(inFolderName); Assist.DeleteFilesInFolder(inFolderName); Dictionary <string, string[]> finalclassname = new Dictionary <string, string[]>(); //Load Cfg XML string cfgPath = Assist.RootPath + "Cfg";; Dictionary <string, XmlDocument> dicXML = Assist.GetXml(cfgPath); string xmlName; XmlNodeList nodeList; Dictionary <string, string> dicFunctions = new Dictionary <string, string>(); foreach (XmlDocument xml in dicXML.Values) { xmlName = xml.DocumentElement.Name; if (xmlName == "Functions") { //保证先Load Functions.xml nodeList = xml.GetElementsByTagName("function"); foreach (XmlNode node in nodeList) { foreach (XmlAttribute attr in node.Attributes) { if (attr.Name == "name") { dicFunctions[attr.Value] = node.InnerText; break; } } } break; } } Dictionary <string, ExcelToCSharp> dicEc = new Dictionary <string, ExcelToCSharp>(); string tableName = ""; string tableDes = ""; string cfgName = "", desName = "", fieldName; ExcelToCSharp e; List <string[]> values; foreach (XmlDocument xml in dicXML.Values) { xmlName = xml.DocumentElement.Name; if (xmlName == "CfgItems") { nodeList = xml.GetElementsByTagName("cfg"); foreach (XmlNode node in nodeList) { foreach (XmlAttribute attr in node.Attributes) { if (attr.Name == "name") { cfgName = attr.Value; } else if (attr.Name == "des") { desName = attr.Value; } } //finalclassname.Add(cfgName, desName); e = new ExcelToCSharp(inHeritNames, "Cfg" + Assist.FirstLetterUp(cfgName), inFolderName, dicFunctions); e.SetInherit(inHeritNames); values = new List <string[]>(); foreach (XmlNode paramNode in node.ChildNodes) { string[] v = new string[4]; foreach (XmlAttribute attr in paramNode.Attributes) { fieldName = attr.Name; if (fieldName == "name") { v[0] = attr.Value; } else if (fieldName == "type") { v[1] = attr.Value; } else if (fieldName == "des") { v[2] = attr.Value; } else if (fieldName == "link") { v[3] = attr.Value; } } values.Add(v); } e.SetValue(cfgName, values); dicEc.Add(cfgName, e); } } } try { Assist.GetObjPaths(suffixName, inPath).ForEach(delegate(string path) { DataTable dt = null; bool bExcel = true; if (suffixName == ".xlsx") { DataSet ds = Assist.ExcelToData(path); dt = ds.Tables[0]; } else if (suffixName == ".txt") { tableDes = path; dt = Assist.TxtToData(path); bExcel = false; } if (dt != null) { // ===================== 类名注释 ======================== string acn = path.Contains("(") ? path.Split('(')[1] : path.Split('(')[1]; string acnn = acn.Contains(")") ? acn.Split(')')[0] : acn.Split(')')[0]; tableDes = acnn; // ======================================================= tableName = Assist.FirstLetterUp(dt.TableName); e = new ExcelToCSharp(inHeritNames, "Cfg" + tableName, inFolderName, dicFunctions); e.SetInherit(inHeritNames); DataRowCollection rows = dt.Rows; values = new List <string[]>(); string note = null; string strFieldName = null; for (int x = 0; x < dt.Columns.Count; x++) { if (rows[2][x].ToString() != "") { string[] v = new string[4]; v[0] = rows[0][x].ToString().Trim(); v[1] = rows[2][x].ToString().Trim(); if (bExcel) { v[2] = rows[1][x].ToString().Trim(); v[3] = rows[3][x].ToString().Trim(); } else { strFieldName = rows[1][x].ToString().Trim(); note = rows[3][x].ToString().Trim(); v[2] = note == "" ? strFieldName : string.Concat(strFieldName, ";", note); v[3] = rows[4][x].ToString().Trim(); } values.Add(v); } } e.SetValue(acnn, values); dicEc.Add(tableName, e); finalclassname.Add(dt.TableName, new string[] { acnn, e.GetKeyType() }); } }); } catch (Exception ex) { throw new Exception(tableDes + ex.Message + "可能是Excel打开表左下角的名字跟其它表重复。"); } foreach (ExcelToCSharp ec in dicEc.Values) { ec.CreateCode(dicEc); } CreatePBData final = new CreatePBData(inHeritNames, "PBData", inFolderName); final.SetValue(finalclassname); return(true); }