【发布时间】:2013-04-27 10:18:01
【问题描述】:
我需要编写一个将节点序列转换为字符串序列的 XSLT 函数。我需要做的是对序列中的所有节点应用一个函数,并返回一个与原始序列一样长的序列。
这是输入文档
<article id="4">
<author ref="#Guy1"/>
<author ref="#Guy2"/>
</article>
调用站点是这样的:
<xsl:template match="article">
<xsl:text>Author for </xsl:text>
<xsl:value-of select="@id"/>
<xsl:variable name="names" select="func:author-names(.)"/>
<xsl:value-of select="string-join($names, ' and ')"/>
<xsl:value-of select="count($names)"/>
</xsl:function>
这是函数的代码:
<xsl:function name="func:authors-names">
<xsl:param name="article"/>
<!-- HELP: this is where I call `func:format-name` on
each `$article/author` element -->
</xsl:function>
我应该在func:author-names 中使用什么?我尝试使用xsl:for-each,但结果是单个节点,而不是序列。
【问题讨论】:
-
请添加所需输出的示例。
-
令人困惑的是,在您想要“将函数应用于节点序列”的问题标题中,但是在您的代码中,您使用单个参数值调用函数节点。同样令人困惑的是,您没有指定参数的类型和函数的返回类型。这使得这个问题非常难以理解。我总是建议任何开始使用 XSLT 的人始终指定类型:变量、函数参数、模板参数和全局参数、模板输出的类型。