有如下的XML结构:
<response name="test2"> <Status> <StatusCode>101</StatusCode> <Message>no</Message> <test> <a1>a</a1> <a2>b</a2> </test> <Status>Complete</Status> </Status> <UniqueID>testplayer</UniqueID> <Balance>12.0</Balance> <Currency>GBP</Currency> <Country>GB</Country> <StakeLimit>100</StakeLimit> <LossLimit>5</LossLimit> <SessionTimeout>30</SessionTimeout></response>
现需要把这个response复制出来,并且把每个element前加一个namespace前缀,如ns, 则有:
<xsl:template name="copyResponse" match="/*"> <xsl:param name="childNodes" select="*"/> <xsl:for-each select="$childNodes"> <xsl:choose> <xsl:when test="*"> <xsl:element name="ns:{name()}"> <xsl:call-template name="copyResponse"> <xsl:with-param name="childNodes" select="child::*"/> </xsl:call-template> </xsl:element> </xsl:when> <xsl:otherwise> <xsl:element name="ns:{name()}"><xsl:value-of select="."/></xsl:element> </xsl:otherwise> </xsl:choose> </xsl:for-each> </xsl:template>
主要思想:递归。