<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    kooyee ‘s blog

    開源軟件, 眾人努力的結晶, 全人類的共同財富
    posts - 103, comments - 55, trackbacks - 0, articles - 66
       :: 首頁 :: 新隨筆 :: 聯系 :: 聚合  :: 管理

    [JAVA] 使用xsl來動態生成java代碼

    Posted on 2007-12-08 19:54 kooyee 閱讀(548) 評論(1)  編輯  收藏 所屬分類: Java
    xsl本身就是一個構型良好的xml,它能夠把一個xml文檔轉換成另外一個xml文檔,或者轉換成文本文件、html文件等等。這里就是利用xsl來動態的生成我們想要的java文件(從某種角度看,java代碼其實也就是一個文本文件),希望能夠通過這篇文章,看到xml以及相關的技術所具有的強大能力!

    這里首先給一個xml例子,我們將通過一個xsl從該xml文件中抽取有用的信息來生成java代碼(實際上是一個javabean):
    [code]
    <?xml version="1.0" encoding="ISO-8859-1" ?> 
    <bean>
        
    <name>Product</name> 
        
    <comments>This bean represents a product that the company
    offers to its customers
    </comments> 
        
    <property>
            
    <name>code</name> 
            
    <type>int</type> 
            
    <comments>the product inventory code</comments> 
        
    </property>
        
    <property>
            
    <name>name</name> 
            
    <type>String</type> 
            
    <comments>the product name</comments> 
        
    </property>
        
    <property>
            
    <name>testedOnAnimals</name> 
            
    <type>boolean</type> 
            
    <comments>the flag that indicates if the product was
    tested on animals
    </comments> 
        
    </property>
        
    <property>
            
    <name>availableSince</name> 
            
    <type>java.util.Date</type> 
            
    <comments>the date when the company started offering this
    product to its customers
    </comments> 
        
    </property>
    </bean> 
    [/code]

    下面我就直接給出轉換的xsl,如果大家對xsl不是很了解的話,可以先看一些資料,了解之后就會明白了。我在里面稍微做了些注釋:
    [code]
    <?xml version="1.0"?>
    <xsl:stylesheet 
        
    xmlns:xsl="http://www.w3.org/1999/XSL/Transform" 
        version
    ="1.0"   
        xmlns:java
    ="http://xml.apache.org/xslt/java"
        exclude-result-prefixes
    ="java">

    <!--這里就是指定通過這個xsl所轉換的結果的類型,是text格式-->
    <xsl:output method = "text"/>

    <!--xslt使用模版來處理xml中的節點-->
    <xsl:template match="bean">

    /**
    <xsl:value-of select="comments"/>//這里是獲取xml文檔中的節點值
    * This class has been generated by the XSLT processor from the
    metadata 
    */
    public class 
    <xsl:value-of select="name"/> {

        /**
         * Creates a new instance of the 
    <xsl:value-of
    select="name"/> bean
         */
        public 
    <xsl:value-of select="name"/>() {}
             
        
    <xsl:apply-templates select="property"/>
    }
    </xsl:template>

    <xsl:template match="property">
        private 
    <xsl:value-of select="type"/>
        
    <xsl:text> </xsl:text>//輸出文本,這里是輸出一個空格
        
    <xsl:value-of select="name"/>;
        
    <xsl:variable name="name" select="name"/>//定義xsl中要使用的變量
        
    <xsl:variable name="cname" select="java:Capitalizer.capitalize($name)"/>//這里使用了xslt extensions,它可以允許在xslt中直接引用java中方法,非常方便。
        /**
         * Sets 
    <xsl:value-of select="comments"/>
         * @param 
    <xsl:value-of select="name"/> is <xsl:value-of
    select="comments"/>
         */
        public void set
    <xsl:value-of select="$cname"/>(<xsl:value-
    of select="type"/> <xsl:text> </xsl:text><xsl:value-
    of select="name"/>) {
          this.
    <xsl:value-of select="name"/> = <xsl:value-of
    select="name"/>;          
        }

        /**
         * Returns 
    <xsl:value-of select="comments"/>
         * @return 
    <xsl:value-of select="comments"/>
         */
        public 
    <xsl:value-of select="type"/><xsl:text></xsl:text>
        
    <xsl:apply-templates select="type"/><xsl:value-of
        
    select="$cname"/>() {
          return 
    <xsl:value-of select="name"/>;
        }
    </xsl:template>

    <xsl:template match="type">
        
    <xsl:variable name="type" select="."/>
        
    <xsl:choose>
        
    <xsl:when test="$type='boolean'">is</xsl:when>
        
    <xsl:otherwise>get</xsl:otherwise>
        
    </xsl:choose>
    </xsl:template>

    </xsl:stylesheet>
    [/code]

    好了,完成以上工作之后,只要在cmd中,輸入如下的命令行,就可以獲得我們想要的結果了:

    java org.apache.xalan.xslt.Process -in xmlSource  -xsl stylesheet -out outputfile

    這里列出結果:
    [code]
    /**
    * This bean represents a product that the company offers to its
    customers
    * This class has been generated by the XSLT processor from the
    metadata
    */

    public class Product {

        
    /**
         * Creates a new instance of the Product bean
         
    */

        
    public Product() {}
             
             
        
    private int code;
             
        
    /**
         * Sets the product inventory code
         * 
    @param code is the product inventory code
         
    */

        
    public void setCode(int code) {
            
    this.code = code;          
        }


        
    /**
         * Returns the product inventory code
         * 
    @return the product inventory code
         
    */

        
    public int getCode() {
            
    return code;
        }


        
    private String name;
             
        
    /**
         * Sets the product name
         * 
    @param name is the product name
         
    */

        
    public void setName(String name) {
            
    this.name = name;          
        }


        
    /**
         * Returns the product name
         * 
    @return the product name
         
    */

        
    public String getName() {
            
    return name;
        }


        
    private boolean testedOnAnimals;
             
        
    /**
        * Sets the flag that indicates if the product was tested on animals
        * 
    @param testedOnAnimals is the flag that indicates if the product
    was tested on animals
        
    */

        
    public void setTestedOnAnimals(boolean testedOnAnimals) {
            
    this.testedOnAnimals = testedOnAnimals;          
        }


        
    /**
         * Returns the flag that indicates if the product was tested on
    animals
         * 
    @return the flag that indicates if the product was tested on
    animals
         
    */

        
    public boolean isTestedOnAnimals() {
            
    return testedOnAnimals;
        }


        
    private java.util.Date availableSince;
             
        
    /**
         * Sets the date when the company started offering this product to
    its customers
         * 
    @param availableSince is the date when the company started
    offering this product to its customers
         
    */

        
    public void setAvailableSince(java.util.Date availableSince) {
            
    this.availableSince = availableSince;          
        }


        
    /**
         * Returns the date when the company started offering this product
    to its customers
         * 
    @return the date when the company started offering this product
    to its customers
         
    */

        
    public java.util.Date getAvailableSince() {
            
    return availableSince;
        }


    }

    [
    /code]

    總結:
    1. 在熟悉了xsl的基本使用之后,理解以上的內容并不是困難;
    2. 這樣做是比較適合預先知道了某些邏輯功能,但由于某種原因,需要動態生成,或者是為了節省不必要的重復工作,可以通過它自動生成代碼;
    3. 修改這個xsl比較方便。

    評論

    # re: [JAVA] 使用xsl來動態生成java代碼  回復  更多評論   

    2010-08-23 15:10 by cosplay
    在熟悉了xsl的基本使用之后,理解以上的內容并不是困難;
    2. 這樣做是比較適合預先知道了某些邏輯功能,但由于某種原因,需要動態生成,或者是為了節省不必要的重復工作,可以通過它自動生成代碼;
    3. 修改這個xsl比較方便
    主站蜘蛛池模板: 成人福利在线观看免费视频| 亚洲午夜AV无码专区在线播放 | 中文字幕在线免费看线人| 亚洲高清一区二区三区| 久久久无码精品亚洲日韩京东传媒| 亚洲国产综合无码一区二区二三区 | 午夜网站在线观看免费完整高清观看| 亚洲av成人中文无码专区| 亚洲人成网站在线观看播放动漫 | 国产啪精品视频网站免费尤物| 色偷偷亚洲男人天堂| 亚洲中文字幕无码久久2020| 亚洲久本草在线中文字幕| 亚洲区小说区激情区图片区| 亚洲国产午夜福利在线播放| 四虎永久成人免费影院域名| 久久伊人亚洲AV无码网站| 日本特黄a级高清免费大片| 毛片a级毛片免费播放下载| 成年人视频免费在线观看| 18女人腿打开无遮掩免费| 久久中文字幕免费视频| 男人j进入女人j内部免费网站| 青青操视频在线免费观看| 中文毛片无遮挡高清免费| 国产真人无码作爱免费视频| 丝袜足液精子免费视频| 国产在线精品一区免费香蕉| 免费无码一区二区三区蜜桃| 久久久久久免费一区二区三区| 涩涩色中文综合亚洲| 亚洲成年网站在线观看| 亚洲中文字幕无码中文字| 亚洲αⅴ无码乱码在线观看性色 | 精品久久久久成人码免费动漫| 91香蕉国产线观看免费全集| 最好看的中文字幕2019免费| 91av免费观看| 精品久久久久成人码免费动漫 | 亚洲13又紧又嫩又水多| 亚洲中文字幕乱码AV波多JI|