XML和XSLT实现代码生成器(II)

类别:Java 点击:0 评论:0 推荐:
XML和XSLT实现代码生成器(II) XSLT处理元数据

       如前文所述,当建立元数据以后,就可以使用XSLT将XML数据转换为实际的代码了,列表1.3展示了一个XSL文档,它将处理上述的XML元数据,完成转换工作。

<?xml version="1.0" encoding="UTF-8"?>

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">

    <!—Java代码是文本格式的,所以需要设定输出方法为testà

    <xsl:output method="text"/>

    <xsl:variable name="properties" select="/xgen/javabean/property"/>

    <xsl:template match="/">

        <xsl:apply-templates select="xgen"/>

    </xsl:template>

    <!—匹配xgen元素 à

    <xsl:template match="xgen">

        <xsl:text>/*Generated By XGen Xingchen Chu@XS Group Copyright(c) Reserved*/</xsl:text>

        <xsl:apply-templates select="javabean"/>

    </xsl:template>

    <!—匹配javabean元素,实际代码生成在此完成à

    <xsl:template match="javabean">

        <xsl:text>package </xsl:text>           <!—输出包名à

        <xsl:value-of select="package/name"/>

        <xsl:text>;</xsl:text>

        <xsl:text>public class </xsl:text>  <!—输出JavaBean类名 à

        <xsl:value-of select="name"/>

        <xsl:text> implements </xsl:text>       <!—输出实现的接口à

        <xsl:if test="implement">

            <xsl:apply-templates select="implement"/>

        </xsl:if>

        <xsl:text>java.io.Serializable</xsl:text>   <!—每个JavaBean必须实现的接口à

        <xsl:text>{</xsl:text>

        <xsl:call-template name="printField"/>  <!—输出字段信息—>

        <xsl:call-template name="printConstructor"/> <!—输出构造函数à

        <xsl:apply-templates select="property"/>    <!—输出所有属性的get和set方法à

        <xsl:text>}</xsl:text>

    </xsl:template>

    <!—匹配implement元素,简单的输出其值并跟逗号à

    <xsl:template match="implement">

        <xsl:value-of select="text()"/><xsl:text>,</xsl:text>

    </xsl:template>

    <!—匹配property元素,输出适当的方法à

    <xsl:template match="property">

        <xsl:if test="@set='yes'">

            <xsl:call-template name="printSetMethod">

                <xsl:with-param name="property" select="."/>

            </xsl:call-template>

        </xsl:if>

        <xsl:if test="@get='yes'">

            <xsl:call-template name="printGetMethod">

                <xsl:with-param name="property" select="."/>

            </xsl:call-template>

        </xsl:if>

    </xsl:template>

    <xsl:template name="printField">

        <xsl:for-each select="$properties">

            <xsl:text>private </xsl:text>

            <xsl:value-of select="@type"/>

            <xsl:text> </xsl:text>

            <xsl:value-of select="name"/>

            <xsl:text>=</xsl:text>

            <xsl:call-template name="printDefaultValue">    <!—输出字段缺省值à

                <xsl:with-param name="type" select="@type"/>

            </xsl:call-template>

            <xsl:text>;</xsl:text>

        </xsl:for-each>

    </xsl:template>

    <xsl:template name="printConstructor">

        <xsl:text>public </xsl:text>

<xsl:value-of select="/xgen/javabean/name"/>

        <xsl:text>(</xsl:text> 

        <xsl:for-each select="$properties"> <!—输出构造函数参数列à

            <xsl:value-of select="@type"/>

<xsl:text> </xsl:text>

<xsl:value-of select="name"/>

            <xsl:if test="position()&lt;last()">

                <xsl:text>,</xsl:text>

            </xsl:if>

        </xsl:for-each>

        <xsl:text>){</xsl:text>

        <xsl:for-each select="$properties"> <!—输出构造函数主体à

            <xsl:text>this.</xsl:text>

<xsl:value-of select="name"/><xsl:text>=</xsl:text>

            <xsl:value-of select="name"/><xsl:text>;</xsl:text>

        </xsl:for-each>

        <xsl:text>}</xsl:text>

    </xsl:template>

 </xsl:stylesheet>

列表1.3

本文地址:http://com.8s8s.com/it/it16523.htm