代码自动生成,代码生成器。
方法一 拼字符串
拼字符串,任何开发工具任何语言都可以,死板,编译代码,拼字符串很麻烦,格式变动就要在原来的拼接字符串上改动,容易出错。
不过使用起来方便。
方法二用微软的VS工具 XML和XSLT。
方法
VS2013,打开自己写的xsl文件,选择菜单XML下的 《开始XLST而不调试》,选择对应的自己写的XML元数据文件,就生成了。
需要自己编译XML文件和XLS文件。
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
<?xml version="1.0" encoding="GB2312" standalone="yes"?> <?xml-stylesheet href="endE.xsl" type="text/xsl"?> <DATA> <FunctionName>TestFun</FunctionName> <ParaCount>3</ParaCount> <ROWPara> <ROW0>ID</ROW0> <ROW1>Name</ROW1> <ROW2>IDNo</ROW2> <ROW2>CardNo</ROW2> </ROWPara> <ROWName> <ROW0>ID</ROW0> <ROW1>Name</ROW1> <ROW2>Sex</ROW2> <ROW2>age</ROW2> <ROW2>Nation</ROW2> <ROW2>Account</ROW2> <ROW2>City</ROW2> </ROWName> </DATA>
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
<?xml version="1.0" encoding="gb2312" ?> <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> <xsl:template match="/"> <html> <body> <!--第一部分的生成dataset--> <pre> -----------------------OLE Function Log--------------------------- { lg->info("<xsl:value-of select="DATA/FunctionName"/>"); vapp.OleFunction("<xsl:value-of select="DATA/FunctionName"/>",<xsl:for-each select="DATA/ROWPara/*"><xsl:value-of select="current()"/>, </xsl:for-each>); <xsl:for-each select="DATA/ROWName/*" > lg->infoRow(<xsl:value-of select="current()"/>);</xsl:for-each> } </pre> </body> </html> </xsl:template> </xsl:stylesheet>
生成的Code
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
-----------------------OLE Function Log--------------------------- { lg->info("TestFun"); vapp.OleFunction("TestFun",ID, Name, IDNo, CardNo, ); lg->infoRow(ID); lg->infoRow(Name); lg->infoRow(Sex); lg->infoRow(age); lg->infoRow(Nation); lg->infoRow(Account); lg->infoRow(City); }
字段列表
<xsl:for-each select="DATA/FieldName/*"><xsl:value-of select="current()"/>,</xsl:for-each>
参数列表
<xsl:for-each select="DATA/FieldName/*">:<xsl:value-of select="current()"/>,</xsl:for-each>
ParamByName赋值
<xsl:for-each select="DATA/FieldName/*">query->ParamByName("<xsl:value-of select="current()"/>")->Value = table->FieldByName("<xsl:value-of select="current()"/>")->Value;
</xsl:for-each>
自己编写独立解析XSL和XML的EXE
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
private void button1_Click(object sender, EventArgs e) { String outFile; outFile = "E:\\TableClass.txt"; System.Xml.XmlDocument xdoc = new System.Xml.XmlDocument(); System.Xml.Xsl.XslTransform xslt = new System.Xml.Xsl.XslTransform(); xslt.Load("E:\\TableClass.xsl"); xslt.Transform("E:\\TableClass.xml", outFile); String CodeText; CodeText= System.IO.File.ReadAllText(outFile); CodeText=CodeText.Replace(">", ">"); System.IO.File.WriteAllText(outFile, CodeText); }
判断是否为自增列,xsl生成的最终代码换行有问题,其他已经实现。
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
<xsl:choose> <xsl:when test="@Identity='1'"> __property <xsl:value-of select="@Type"/> <xsl:value-of select="current()"/>={read=F<xsl:value-of select="current()"/>}; </xsl:when> <xsl:otherwise> __property <xsl:value-of select="@Type"></xsl:value-of> <xsl:value-of select="current()"/> ={read=F<xsl:value-of select="current()"/>,write=F<xsl:value-of select="current()"/>}; </xsl:otherwise> </xsl:choose>