Exemplo n.º 1
0
        /// <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);
        }
Exemplo n.º 2
0
        /// <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);
        }
Exemplo n.º 3
0
        /// <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);
        }
Exemplo n.º 4
0
        /// <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);
        }