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

XMLXSLT实现代码生成器(II

XSLT处理元数据

       如前文所述,当建立元数据以后,就可以使用XSLTXML数据转换为实际的代码了,列表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

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值