文档章节

类库说明文档生成器

清山博客
 清山博客
发布于 2016/07/15 20:02
字数 502
阅读 7
收藏 0

 原理很简单,解析程序集生成时的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);
        }

源码下载: 下载地址


本文转载自:http://blog.csdn.net/a497785609/article/details/7381055

清山博客
粉丝 3
博文 142
码字总数 30397
作品 0
广州
私信 提问
使用 Ruby 开发代码生成器

在软件开发工程中,源代码生成工具是提升生产效率的利器。在我的工作中,曾经使用过 XLST、FreeMaker 等多种技术开发源代码生成器,最终我还是选择了脚本语言 Ruby。Ruby 以其简洁有趣的语法...

IBMdW
2012/07/21
1K
0
1.8 Java类库及其组织结构

Java 官方为开发者提供了很多功能强大的类,这些类被分别放在各个包中,随JDK一起发布,称为Java类库或Java API。 API(Application Programming Interface, 应用程序编程接口)是一个通用概念...

李序锴
2017/12/22
0
0
YMP 的 Maven 扩展工具--YMP-Maven-Extension

YMP-Maven-Extension(YMP Maven扩展工具) 帮助您快速搭建基于YMP框架的各种Java工程结构的Maven扩展工具集合,主要包括和两部分。 YMP框架项目地址:https://gitee.com/suninformation/ym...

有理想的鱼
2016/03/16
434
1
Insql 1.8.2 发布,轻量级 .NET ORM 类库

Insql 是一个轻量级的.NET ORM 类库。对象映射基于 Dapper, Sql 配置灵感来自于 Mybatis。 TA 的追求:简洁、优雅、性能与质量 TA 的宗旨:让你用起来感觉到自由、直观与舒爽。 1.8.2 版本更...

rainrcn
02/23
0
0
有理想的鱼/ymate-maven-extension

YMP-Maven-Extension(YMP Maven扩展工具) 帮助您快速搭建基于YMP框架的各种Java工程结构的Maven扩展工具集合,主要包括和两部分。 YMP框架项目地址:https://gitee.com/suninformation/ym...

有理想的鱼
2017/11/03
0
0

没有更多内容

加载失败,请刷新页面

加载更多

JWT学习总结

官方 https://jwt.io 英文原版 https://www.ietf.org/rfc/rfc7519.txt 或 https://tools.ietf.org/html/rfc7519 中文翻译 https://www.jianshu.com/p/10f5161dd9df 1. 概述 JSON Web Token(......

冷基
今天
4
0
AOP的学习(1)

AOP 理解AOP编程思想(面向方法、面向切面) spring AOP的概念 方面 -- 功能 目标 -- 原有方法 通知 -- 对原有方法增强的方法 连接点 -- 可以用来连接通知的地方(方法) 切入点 -- 将用来插入...

太猪-YJ
今天
4
0
一张图看懂亮度、明度、光度、光亮度、明亮度

亮度、明度、光亮度,Luminance和Brightness、lightness其实都是一个意思,只是起名字太难了。 提出一个颜色模型后,由于明度的取值与别人的不同,为了表示区别所以就另想一个词而已。 因此在...

linsk1998
昨天
11
0
Python应用:python链表示例

前言 python链表应用源码示例,需要用到python os模块方法、函数和类的应用。 首先,先简单的来了解下什么是链表?链表是一种物理存储单元上非连续、非顺序的存储结构,数据元素的逻辑顺序是...

python小白1
昨天
5
0
Source Insight加载源码

Source Insight是一个图形化的源代码查看工具(当然也可以作为编译工具)。如果一个项目的源代码较多,此工具可以很方便地查找到源代码自建的依赖关系。 1.创建工程 下图为Snort源代码的文件...

天王盖地虎626
昨天
6
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部