我有一个具有csv值的输入字符串。例如,1,2,3 我需要将每个值分开并分配给for-each循环中的目标节点。逗号分隔的字符串解析XSLT为每个节点
我这下面的模板,分割基于定界符输入字符串。如何将每个分隔值分配给for-each循环中的目标元素。
<xsl:template name="output-tokens">
<xsl:param name="list"/>
<xsl:param name="delimiter"/>
<xsl:variable name="newlist">
<xsl:choose>
<xsl:when test="contains($list, $delimiter)">
<xsl:value-of select="normalize-space($list)"/>
</xsl:when>
<xsl:otherwise>
<xsl:value-of select="concat(normalize-space($list), $delimiter)"/>
</xsl:otherwise>
</xsl:choose>
</xsl:variable>
<xsl:variable name="first" select="substring-before($newlist, $delimiter)"/>
<xsl:variable name="remaining"
select="substring-after($newlist, $delimiter)"/>
<xsl:variable name="count" select="position()"/>
<num>
<xsl:value-of select="$first"/>
</num>
<xsl:if test="$remaining">
<xsl:call-template name="output-tokens">
<xsl:with-param name="list" select="$remaining"/>
<xsl:with-param name="delimiter">
<xsl:value-of select="$delimiter"/>
</xsl:with-param>
</xsl:call-template>
</xsl:if>
</xsl:template>
输入XML:
<out1:AvailableDates>
<out1:AvailableDate>15/12/2011,16/12/2011,19/12/2011,20/12/2011,21/12/2011</out1:AvailableDate>
</out1:AvailableDates>
预期输出:
<tns:AvailableDates>
<tns:AvailableDate>15/12/2011</tns:AvailableDate>
<tns:AvailableDate>16/12/2011</tns:AvailableDate>
<tns:AvailableDate>120/12/2011</tns:AvailableDate>
</tns:AvailableDates>
非常感谢。我正在使用BPEL 10g。它有xslt版本1.0。它有什么可能? – Arun 2011-12-14 09:50:05
我已经更新了我对Xslt-1.0的回答 - 它使用*输出令牌*命名模板 – Vitaliy 2011-12-14 10:54:06
@Vitaliy:请使用任何XSLT 1.0(兼容)处理器运行您的XSLT 1.0解决方案,并确认这会产生错误。在XSLT 1.0中,在RTF(结果树片段)上允许有一组非常有限的操作。请改正。 – 2011-12-14 14:08:34