Ввод:
<root>
<name>a,b,c,d,e,f,g,h,i,j,k,</name>
<value>1,,3,,5,,7,,,,11,<value>
</root>
Ожидаемый результат
<root>
<out>a:1|c:3|e:5|g:7|k:11</out>
<e>5</e>
<j/>
</root>
Мне удалось получить ожидаемый результат через рекурсию.Но мне нужно напечатать два значения среди тех, которые отдельно, как «е» и «J».во время цикла, если имена 'e' или 'j', эти элементы должны быть созданы. Я не смог этого сделать.
Код рекурсии
<xsl:template match="//root">
<xsl:param name="columnName" select="a,b,c,d,e,f,g,h,i,j,k"></xsl:param>
<root>
<out>
<xsl:call-template name="merge">
<xsl:with-param name="name" select="normalize-space(name)" />
<xsl:with-param name="value" select="normalize-space(value)" />
</xsl:call-template>
</out>
</root>
</xsl:template>
<xsl:template name="merge">
<xsl:param name="name" />
<xsl:param name="value" />
<xsl:param name="separator" select="','" />
<xsl:variable name="currentValue" select="substring-before($value, $separator)"/>
<xsl:if test="$currentValue!=''">
<xsl:value-of select="substring-before($name, $separator)" /><xsl:text>:</xsl:text>
<xsl:value-of select="$currentValue" /><xsl:text>|</xsl:text>
</xsl:if>
<xsl:call-template name="merge">
<xsl:with-param name="value" select="normalize-space(substring-after($value, $separator))" />
<xsl:with-param name="name" select="normalize-space(substring-after($name, $separator))" />
</xsl:call-template>
</xsl:template>
Как я могудобавьте два элемента в цикле для получения 'out'.?