C# 读取XML注释
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注释相关推荐
- 利用opencv中的类FileStorage生成和读取XML和YAML文件
有时候程序中的变量值.字符串.数组等数据也需要独立于源代码本身保存,这个时候就需要用到XML和YAML文件进行保存. OpenCV4提供了用于生成和读取XML文件和YAML文件的类FileStorag ...
- DOM4j读取XML文件(SAXReader)
为什么80%的码农都做不了架构师?>>> DOM4j读取XML文件(SAXReader) 一.一个很好的SAXReader读写xml文件的例题: 总结: Document do ...
- Flash读取xml奥秘
首先讲的是xml的格式, <?xml version="1.0" encoding="utf-8"?>(注释:最好使用utf-8编码) <格式 ...
- C#中常用的几种读取XML文件的方法
XML文件是一种常用的文件格式,例如WinForm里面的app.config以及Web程序中的web.config文件,还有许多重要的场所都有它的身影.Xml是Internet环境中跨平台的,依赖于内 ...
- C#来创建和读取XML文档 [转]
C#来创建和读取XML文档 [关键词]:XML 录入:小鱼之家 来源:http://fisher.xundain.com 时间:2005-3-3 23:41:54 点击:85次 扩展标记语言XML( ...
- C#操作XML之——读取XML文件
名称空间:System.Xml 1.使用XmlDocument读取XML[例] //创建xml文档 XmlDocument xdoc = new XmlDocument(); //读取XML文档 xd ...
- asp.net读取xml方法
这个适合刚学asp.net的同学,大神直接略过好了,asp.net经常会有很多用到XML的地方,比如全国省市的联动,以及一些菜单读取等等都有xml的影子,直接贴代码,以便我以后用到的时候忘了,注释我写 ...
- html+注释格式化,使用xml注释来生成格式化的html输出
我试图从我在xml文件中的注释中生成一个格式良好的html文档.目前我有一个xml文件,用于生成xml表格的html列表.为了让我添加有关表格的评论,我手动将注释添加到输出html文件中.使用xml注 ...
- java xml读取方法_Java读取XML文件的方法
Java读取XML文件的方法 发布时间:2020-08-19 14:39:08 来源:亿速云 阅读:63 作者:小新 这篇文章主要介绍了Java读取XML文件的方法,具有一定借鉴价值,需要的朋友可以参 ...
最新文章
- iOS开发-获取设备型号信息
- 微软安全管理解决方案 为企业安全保驾护航
- 网站改版都要注重哪些因素?
- 关于SCI的那些事儿
- ITK:翻译矢量图像
- 确定S中最接近中位数的k个元素(算法导论第三版9.3-7)
- mq补偿机制java代码_RocketMQ源码分析之消息消费机制-消费端消息负载均衡机制与重新分布 - Java 技术驿站-Java 技术驿站...
- oraclize预言机资料
- 第七章读书笔记《深入理解计算机系统》
- wps linux数据库,金山 WPS for Linux
- js如何直接打开百度地图app进行导航
- IT男最新躺枪:武汉恋爱培训班教搭讪女孩技巧 学员多为IT男
- 技法の穴をふさぐ:コスト編 --人月単価は案件ごとにバラバラ公表データで相場を知る
- XZK-JAVA-支线任务-031303-ElasticSearch 入门
- linux电脑关机命令是什么问题,linux下正常关机之命令详解 -电脑资料
- 【分布式】关于分布式“一致性”的讨论
- 名帖220 赵孟頫 行书《光福寺重建塔记》
- 小程序轻量级开发框架Flask-SQLalchemy 学习笔记(贼拉好用)
- 俄语转化成拉丁字母java_java - 如何在Java String中将西里尔字母转换为英语拉丁语? - SO中文参考 - www.soinside.com...
- QPS和TPS是什么?