代码生成器

代码自动生成,代码生成器。

方法一 拼字符串

拼字符串,任何开发工具任何语言都可以,死板,编译代码,拼字符串很麻烦,格式变动就要在原来的拼接字符串上改动,容易出错。

不过使用起来方便。

方法二用微软的VS工具 XML和XSLT。

方法

VS2013,打开自己写的xsl文件,选择菜单XML下的 《开始XLST而不调试》,选择对应的自己写的XML元数据文件,就生成了。

需要自己编译XML文件和XLS文件。

<?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>
TestFun.xml
<?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>
CallFunctionPara.xsl


生成的Code

  -----------------------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);
}  
        
SourceCode
字段列表 
<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

 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("&gt;", ">");
            
            System.IO.File.WriteAllText(outFile, CodeText);
}
View Code

判断是否为自增列,xsl生成的最终代码换行有问题,其他已经实现。

      <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>  
choose
原文地址:https://www.cnblogs.com/cb168/p/4285656.html