閱讀176 返回首頁    go 阿裏雲 go 技術社區[雲棲]


類庫說明文檔生成器

 原理很簡單,解析程序集生成時的xml描述文檔。設置生成程序集時生成xml描述文檔的操作如下:


程序界麵:


生成後的文檔視圖(樣式調整需改源碼)


關鍵代碼:

        /// <summary>
        /// 生成HTML說明文檔
        /// </summary>
        /// <param name="filePath">文件路徑</param>
        public void GenneralHtmlDocument(string filePath)
        {
            XmlDocument doc = new XmlDocument();
            doc.Load(filePath);
            XmlElement root = doc.DocumentElement;
            XmlNodeList nodeList = root.SelectNodes("members")[0].SelectNodes("member");
            XmlNode assembly = root.SelectNodes("assembly")[0].SelectNodes("name")[0];
            StringBuilder htmlBuilder = new StringBuilder();
            htmlBuilder.Append(@"<!DOCTYPE HTML PUBLIC '-//W3C//DTD HTML 4.0 Transitional//EN'><html><head><title></title></head><body>");
            htmlBuilder.Append("<table>");
            foreach (XmlNode item in nodeList)
            {
                string name = item.Attributes["name"].InnerText;
                if (name.StartsWith("T"))//類標識
                {
                    string className = name.Substring(name.LastIndexOf(".") + 1);
                    htmlBuilder.Append(string.Format(@" <tr><td colspan='6'> <b>【命名空間:{0}】</b></td></tr>", assembly.InnerText.TrimSpace()));
                    htmlBuilder.Append(string.Format(@" <tr><td colspan='6'> <b>類名:{0}</b></td></tr>", className));
                }
                else if (name.StartsWith("M"))//方法標識
                {
                    string parmsTypeString = string.Empty;
                    string[] parmsTypeArr = new string[] { };
                    if (name.Contains("(") & name.Contains(")"))
                    {
                        parmsTypeString = name.Substring(name.IndexOf("(") + 1, name.LastIndexOf(")") - (name.IndexOf("(") + 1));
                        parmsTypeArr = parmsTypeString.Split(new string[] { "," }, StringSplitOptions.RemoveEmptyEntries);
                    }
                    name = name.Contains("(") ? name.Substring(0, name.LastIndexOf("(")) : name;
                    string methodName = name.Substring(name.LastIndexOf(".") + 1);
                    string methodDescription = item.SelectNodes("summary")[0].InnerText.TrimSpace();
                    htmlBuilder.Append(string.Format(@"<tr><td class='tdleft'>方法名</td><td>{0}</td><td class='tdleft'>方法描述</td><td colspan='2'>{1}</td></tr>", methodName, methodDescription));
                    htmlBuilder.Append("<tr> <td class='tdleft'>參數名稱 </td> <td class='tdleft'> 參數類型 </td> <td class='tdleft'> 是否必須 </td><td class='tdleft'>參數描述</td><td class='tdleft'>默認值</td> </tr>");

                    XmlNodeList parmsList = item.SelectNodes("param");
                    for (int i = 0; i < parmsList.Count; i++)
                    {
                        string parmsName = parmsList[i].Attributes["name"].InnerText.TrimSpace();
                        string parmsType = i < parmsTypeArr.Length ? parmsTypeArr[i].TrimSpace() : "";
                        string parmsNotes = parmsList[i].InnerText.TrimSpace();
                        string parmsIsNull = "Null";
                        string parmsDefaultValue = GetTypeDefaultValue(parmsType);
                        htmlBuilder.Append(string.Format("<tr><td>{0}</td><td>{1}</td><td>{2}</td><td>{3}</td><td>{4}</td></tr>",
                              parmsName, parmsType, parmsIsNull, parmsNotes, parmsDefaultValue));
                    }
                    if (item.SelectNodes("returns").Count > 0)
                    {
                        string retrun = item.SelectNodes("returns")[0].InnerText.TrimSpace();
                        htmlBuilder.Append(string.Format("<tr><td  class='tdleft'>返回結果:</td><td colspan='5'>{0}</td></tr>", retrun));
                    }
                    htmlBuilder.Append("<tr><td colspan='6'></td></tr>");
                }
            }
            htmlBuilder = new StringBuilder(htmlBuilder.ToString().Substring(0, htmlBuilder.ToString().Length - "<tr><td colspan='6'></td></tr>".Length));
            htmlBuilder.Append("</table>");
            htmlBuilder.Append("<style type='text/css'>");
            htmlBuilder.Append(".tdleft{  background-color: #F2F5A9;width:10%;}");
            htmlBuilder.Append(".tdvalue{ width:200px;}");
            //表格加邊框樣式
            htmlBuilder.Append(@"table{border-collapse:collapse;border-spacing:0;border-left:1px solid #888;border-top:1px solid #888;background:#efefef;}th,td{border-right:1px solid #888;border-bottom:1px solid #888;padding:5px 15px;}th{font-weight:bold;background:#ccc;}");
            htmlBuilder.Append("</style>");
            htmlBuilder.Append(@"</body></html>");
            string documentFilePath = Environment.CurrentDirectory + Path.DirectorySeparatorChar + "document.htm";
            SaveStringToFile(documentFilePath, htmlBuilder.ToString());
            ShowFile(documentFilePath);
        }

源碼下載:下載地址


最後更新:2017-04-02 22:16:38

  上一篇:go 淺談LBS在快遞行業的應用(中)
  下一篇:go nginx 技巧