C#可以通过反射读取类的字段/方法等,可是该如何获取该字段的XML注释?

具体目的:有一个实体类,页面需要有一个与其对应的table,样式大体为

      <tr><td>地东经</td><td><input id='txt_Longitude' type='text' class='form-control' name='Longitude' /></td><td>北纬</td><td><input id='Latitude' type='text' class='form-control' name='Latitude' /></td></tr>

其实体类,大致为:

     /// <summary>/// 东经/// </summary>public double? Longitude{get{ return _Longitude; }set{this.OnPropertyValueChange(_.Longitude,_Longitude,value);           this._Longitude=value;        }      }

由于实体类中属性很多,生成页面的工作量很大,所以想通过反射的方式,读取实体的XML注释及其属性名称,写个循环即可生成上述页面

后查阅相关资料,XML注释是不写入DLL里的,所以直接通过反射的方式获取XML注释是不可能的.

有建议通过对XML文件进行解析,获取其XML注释的

万能的老外已经处理过类似的问题了,参考这里

其提供了一个处理用的类库以及示例

1.在VS里打开项目属性中的XML文档注释功能

即在项目的bin目录中生成一个以当前项目命名的xml文件,读取该文件,即可获取XML注释

2.按照如下方式,获取XML注释

XmlElement documentation = DocsByReflection.XMLFromMember(typeof(SomeExampleClass).GetProperty("ExampleProperty"));
Console.WriteLine(documentation["summary"].InnerText.Trim());

下载链接:

docsbyreflection_2

通过反射获取字段名称/字段类型/及其XML注释,即可根据需要生成页面HTML,示例如下:

StringBuilder sb = new StringBuilder();string rowtemp = "<tr>\r\n" +"<td>{0}</td>\r\n " +"<td>" +"<input id = 'txt_{1}' type = 'text' class='form-control' name='{1}' /></td>\r\n" +"<td>{2}</td>\r\n" +"<td>\r\n" +"<input id = '{3}' type='text' class='form-control' name='{3}' /></td>\r\n" +"</tr>\r\n";//遍历基本属性,生成表 PropertyInfo[] ProList = tp1.GetProperties();List<string> ignoreList = new List<string>();ignoreList.Add("Project_Code");bool toEnd = false;#region 区分字段类型 for (int i = 0; i < ProList.Length; ){         //下述循环为了实现对字段的过滤,以及一行两个<td>,所以,需要检索出下一个可用的字段对象,看上去比较绕while (ignoreList.Contains(ProList[i].Name)){i++;if (i == ProList.Length){toEnd = true;break;}} if (toEnd){break;}PropertyInfo p1 = ProList[i];i++;PropertyInfo p2 = null;if (i < ProList.Length){while (ignoreList.Contains(ProList[i].Name)){i++;if (i == ProList.Length){toEnd = true;     break;}}}if (toEnd || i == ProList.Length){}else{p2 = ProList[i];i++;}sb.AppendLine("<tr>");if (p2 != null){string str1 = getHTML(tp1, p1);string str2 = getHTML(tp1, p2);sb.AppendLine(str1);sb.AppendLine(str2);}else{string str1 = getHTML(tp1, p1);sb.AppendLine(str1);}sb.AppendLine("</tr>");}#endregionwrite2Text(@"C:\STD\"+tp1.Name+".txt", sb);Console.WriteLine("结束");Console.ReadLine();

public static string getCommentText(Type tp1,string nm){Console.WriteLine(nm);XmlElement documentation = DocsByReflection.XMLFromMember(tp1.GetProperty(nm));Console.WriteLine(documentation["summary"].InnerText.Trim());return documentation["summary"].InnerText.Trim();}public static void write2Text(string filename, StringBuilder sb){using (FileStream fs = new FileStream(filename, FileMode.OpenOrCreate)){using (StreamWriter sw = new StreamWriter(fs)){sw.Write(sb.ToString());sw.Flush();}}}public static string getHTML(Type tp1,PropertyInfo p){if (p.Name.Trim() == "Conveyance_Tunnel_Import_Elevation")Console.WriteLine("");string inputTD = "<td>{0}</td>\r\n " +"<td>\r\n" +"<input id = 'txt_{1}' type = 'text' class='form-control' name='{1}' />\r\n"+"</td>\r\n";string selectTD = @"<td>{0}</td><td><select id='{1}' class='form-control' name='{1}'>{2}</select></td>";string chkTD = @"<td>{0}</td><td><label for='chkY_{1}'>是<input type='checkbox' id='chkY_{1}' value='true' class='form-control' name='{1}'></label><label for='chkN_{1}'>否<input type='checkbox' value='false' id='chkN_{1}' class='form-control' name='{1}'></label></td>";if (p.PropertyType == typeof(Guid?)||p.PropertyType==typeof(Guid)){//GUID类型的,去数据库中查找并生成SelectStringBuilder optSb = new StringBuilder();DataTable dt = SqlHelper.ExecuteDataTable("select * from Foreign_Key_Table where Column_Code=@cc and Table_Code=@tc order by Order_ID",new SqlParameter("@cc", p.Name),new SqlParameter("tc",type_code));if (dt.Rows.Count > 0){for (int i = 0; i < dt.Rows.Count; i++){optSb.AppendLine(string.Format("<option value='{0}'>{1}</option>", dt.Rows[i]["Key_Code"], dt.Rows[i]["Key_Name"]));}return string.Format(selectTD, getCommentText(tp1, p.Name), p.Name, optSb.ToString());}else{//如果没有查到,非外键表,直接显示return string.Format(inputTD, getCommentText(tp1, p.Name), p.Name);}}else if (p.PropertyType == typeof(bool?) || p.PropertyType == typeof(bool)){return string.Format(chkTD,getCommentText(tp1, p.Name),p.Name);}else{//生成inputreturn string.Format(inputTD,getCommentText(tp1,p.Name),p.Name);}}

转载于:https://www.cnblogs.com/DayDreamEveryWhere/p/6100167.html

C# 读取XML注释相关推荐

  1. 利用opencv中的类FileStorage生成和读取XML和YAML文件

    有时候程序中的变量值.字符串.数组等数据也需要独立于源代码本身保存,这个时候就需要用到XML和YAML文件进行保存. OpenCV4提供了用于生成和读取XML文件和YAML文件的类FileStorag ...

  2. DOM4j读取XML文件(SAXReader)

    为什么80%的码农都做不了架构师?>>>    DOM4j读取XML文件(SAXReader) 一.一个很好的SAXReader读写xml文件的例题: 总结: Document do ...

  3. Flash读取xml奥秘

    首先讲的是xml的格式, <?xml version="1.0" encoding="utf-8"?>(注释:最好使用utf-8编码) <格式 ...

  4. C#中常用的几种读取XML文件的方法

    XML文件是一种常用的文件格式,例如WinForm里面的app.config以及Web程序中的web.config文件,还有许多重要的场所都有它的身影.Xml是Internet环境中跨平台的,依赖于内 ...

  5. C#来创建和读取XML文档 [转]

    C#来创建和读取XML文档  [关键词]:XML 录入:小鱼之家 来源:http://fisher.xundain.com 时间:2005-3-3 23:41:54 点击:85次 扩展标记语言XML( ...

  6. C#操作XML之——读取XML文件

    名称空间:System.Xml 1.使用XmlDocument读取XML[例] //创建xml文档 XmlDocument xdoc = new XmlDocument(); //读取XML文档 xd ...

  7. asp.net读取xml方法

    这个适合刚学asp.net的同学,大神直接略过好了,asp.net经常会有很多用到XML的地方,比如全国省市的联动,以及一些菜单读取等等都有xml的影子,直接贴代码,以便我以后用到的时候忘了,注释我写 ...

  8. html+注释格式化,使用xml注释来生成格式化的html输出

    我试图从我在xml文件中的注释中生成一个格式良好的html文档.目前我有一个xml文件,用于生成xml表格的html列表.为了让我添加有关表格的评论,我手动将注释添加到输出html文件中.使用xml注 ...

  9. java xml读取方法_Java读取XML文件的方法

    Java读取XML文件的方法 发布时间:2020-08-19 14:39:08 来源:亿速云 阅读:63 作者:小新 这篇文章主要介绍了Java读取XML文件的方法,具有一定借鉴价值,需要的朋友可以参 ...

最新文章

  1. iOS开发-获取设备型号信息
  2. 微软安全管理解决方案 为企业安全保驾护航
  3. 网站改版都要注重哪些因素?
  4. 关于SCI的那些事儿
  5. ITK:翻译矢量图像
  6. 确定S中最接近中位数的k个元素(算法导论第三版9.3-7)
  7. mq补偿机制java代码_RocketMQ源码分析之消息消费机制-消费端消息负载均衡机制与重新分布 - Java 技术驿站-Java 技术驿站...
  8. oraclize预言机资料
  9. 第七章读书笔记《深入理解计算机系统》
  10. wps linux数据库,金山 WPS for Linux
  11. js如何直接打开百度地图app进行导航
  12. IT男最新躺枪:武汉恋爱培训班教搭讪女孩技巧 学员多为IT男
  13. 技法の穴をふさぐ:コスト編 --人月単価は案件ごとにバラバラ公表データで相場を知る
  14. XZK-JAVA-支线任务-031303-ElasticSearch 入门
  15. linux电脑关机命令是什么问题,linux下正常关机之命令详解 -电脑资料
  16. 【分布式】关于分布式“一致性”的讨论
  17. 名帖220 赵孟頫 行书《光福寺重建塔记》
  18. 小程序轻量级开发框架Flask-SQLalchemy 学习笔记(贼拉好用)
  19. 俄语转化成拉丁字母java_java - 如何在Java String中将西里尔字母转换为英语拉丁语? - SO中文参考 - www.soinside.com...
  20. QPS和TPS是什么?

热门文章

  1. PCB设计中插头外壳地的统一处理
  2. 网上跳蚤市场网站系统HTML5+Vue+nodejs
  3. Linux一:Linux启动及登陆
  4. 伯克利开源 Confluo 替代 Kafka;ofo:现场退押与线上无异
  5. 阿里巴巴2015校招笔试题附加题1解答
  6. 各linux桌面性能比较,七大顶级桌面比较!Linux平台自由选择
  7. 退出码 -1073740791 (0xC0000409)
  8. 什么是适配器模式,它有哪些应用场景
  9. 如何搭建Rtmp服务结合uni-app开发直播APP
  10. 计算机网络管理SIMP,网络管理