zoukankan      html  css  js  c++  java
  • 代码生成器

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

    方法一 拼字符串

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

    不过使用起来方便。

    方法二用微软的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
  • 相关阅读:
    Load与onload的区别
    理解.NET中的CLR原理(二)
    用JS实现网站的繁体简体版
    JQUERY获取text,areatext,radio,checkbox,select值
    SQL Server 存储过程的分页方案比拼
    理解.NET中的CLR原理(三)
    请慎用ASP.Net的validateRequest="false"~
    请慎用ASP.Net的validateRequest="false"~
    GridView中的超链接
    GridView中的超链接
  • 原文地址:https://www.cnblogs.com/cb168/p/4285656.html
Copyright © 2011-2022 走看看