我有如下输入:
<Record>
<OldList>,Old1,Old2,Old3</OldList>
<NewList>,New1,New2,New3</NewList>
<Record>
我的输出操作系统XSLT转换如下所示:
<Records>
<Record>
<Old>Old1</Old>
<New>New1</New>
</Record>
<Record>
<Old>Old2</Old>
<New>New2</New>
</Record>
<Record>
<Old>Old3</Old>
<New>New3</New>
</record>
</Records>
你能帮助我得到上面想要的输出吗?我正在使用XSLT 1.0
答案 0 :(得分:0)
尝试以下xslt
<xsl:template match="/*">
<Records>
<xsl:call-template name="oldData">
<xsl:with-param name="oData" select="OldList"/>
<xsl:with-param name="nData" select="NewList"/>
</xsl:call-template>
</Records>
</xsl:template>
<xsl:template name="oldData">
<xsl:param name="oData"/>
<xsl:param name="nData"/>
<xsl:variable name="ofirst" select="substring-before($oData,',')"/>
<xsl:variable name="olast" select="substring-after($oData,',')"/>
<xsl:variable name="nfirst" select="substring-before($nData,',')"/>
<xsl:variable name="nlast" select="substring-after($nData,',')"/>
<xsl:choose>
<xsl:when test="($ofirst!='') and ($nfirst!='')">
<record>
<Old>
<xsl:value-of select="$ofirst"/>
</Old>
<New>
<xsl:value-of select="$nfirst"/>
</New>
</record>
<xsl:call-template name="oldData">
<xsl:with-param name="oData" select="substring-after($oData,concat($ofirst,','))"/>
<xsl:with-param name="nData" select="substring-after($nData,concat($nfirst,','))"/>
</xsl:call-template>
</xsl:when>
<xsl:when test="$olast!='' and $nlast!=''">
<xsl:call-template name="oldData">
<xsl:with-param name="oData" select="$olast"/>
<xsl:with-param name="nData" select="$nlast"/>
</xsl:call-template>
</xsl:when>
<xsl:otherwise>
<record>
<Old>
<xsl:value-of select="$oData"/>
</Old>
<New>
<xsl:value-of select="$nData"/>
</New>
</record>
</xsl:otherwise>
</xsl:choose>
</xsl:template>
在XSLT 1.0中创建可变变量不是一种选择。然而,这可以通过递归来实现。这就是问题如何解决