【发布时间】:2018-09-11 08:54:36
【问题描述】:
输入:
<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>
我能够通过递归得到预期的'out。 但是我需要分别打印两个值,例如“e”和“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>
如何在循环中添加两个元素以获取“退出”。
【问题讨论】:
-
您已将问题标记为xslt-2.0?您使用 XSLT 2 处理器吗?使用
tokenize,您不需要递归模板。 -
部分支持。 Oracle 的 XML 开发工具包(12c 第 1 版)仅部分支持 XSLT 2.0。不支持 XPath 2.0 函数 fn:tokenize、fn:matches 和 fn:replace。
-
其实我认为Oracle XDK 对XSLT 2.0 的支持很少。以后请说明您使用的是什么版本的 XSLT,否则很容易让人写答案浪费您和他们自己的时间。
标签: xml xslt xslt-1.0 xslt-2.0