您可以在 XSLT3 的 CVT 中调用命名模板吗?
Can you call a named template inside a CVT in XSLT3?
我的输入如下:
<party>
<name>Jessica's 18th birthday</name>
<participants>
<participant>
<name>Jessica</name>
</participant>
<participant>
<name>Aron</name>
</participant>
<participant>
<name>Steve</name>
</participant>
</participants>
</party>
我创建了一个名为 template 的实用程序,它给定一个 party
元素,将所有参与者姓名转换为逗号分隔的字符串:
<xsl:template name="list-participants">
<xsl:param name="party"/>
<xsl:value-of select="$party/participants/participant ! name" separator=";"/>
</xsl:template>
我在这里使用 XSLT3。我在我的样式表中使用了所谓的内容值模板 (CVT),因为这使内容更具可读性:
name: {name}
而不是
name: <xsl:value-of select="name"/>
现在我的问题是:是否可以在这里使用这些 {...}
扩展以及 execute/call list-participants
模板?基本上,我想做如下事情:
<xsl:template match="party">
The following persons will be present at the party: {list-participants(party=.)}
</xsl:template>
这里的.
指的是当前的party
元素。 (以上是伪核心,希望它有助于使我的问题更清楚,不要让快速的读者感到困惑。)
你可以说我想做一个函数调用,就像在过程语言中看到的那样。
这(在某种程度上)在 XSLT3 中可能吗?
如果您使用函数而不是命名模板,则可以执行此操作
<xsl:template match="party">
<xsl:text>The following persons will be present at the party:{my:list-participants(.)}</xsl:text>
</xsl:template>
<xsl:function name="my:list-participants">
<xsl:param name="party"/>
<xsl:value-of select="$party/participants/participant/name" separator=";"/>
</xsl:function>
这里的命名空间前缀my
可以根据自己的喜好来定义。
我的输入如下:
<party>
<name>Jessica's 18th birthday</name>
<participants>
<participant>
<name>Jessica</name>
</participant>
<participant>
<name>Aron</name>
</participant>
<participant>
<name>Steve</name>
</participant>
</participants>
</party>
我创建了一个名为 template 的实用程序,它给定一个 party
元素,将所有参与者姓名转换为逗号分隔的字符串:
<xsl:template name="list-participants">
<xsl:param name="party"/>
<xsl:value-of select="$party/participants/participant ! name" separator=";"/>
</xsl:template>
我在这里使用 XSLT3。我在我的样式表中使用了所谓的内容值模板 (CVT),因为这使内容更具可读性:
name: {name}
而不是
name: <xsl:value-of select="name"/>
现在我的问题是:是否可以在这里使用这些 {...}
扩展以及 execute/call list-participants
模板?基本上,我想做如下事情:
<xsl:template match="party">
The following persons will be present at the party: {list-participants(party=.)}
</xsl:template>
这里的.
指的是当前的party
元素。 (以上是伪核心,希望它有助于使我的问题更清楚,不要让快速的读者感到困惑。)
你可以说我想做一个函数调用,就像在过程语言中看到的那样。
这(在某种程度上)在 XSLT3 中可能吗?
如果您使用函数而不是命名模板,则可以执行此操作
<xsl:template match="party">
<xsl:text>The following persons will be present at the party:{my:list-participants(.)}</xsl:text>
</xsl:template>
<xsl:function name="my:list-participants">
<xsl:param name="party"/>
<xsl:value-of select="$party/participants/participant/name" separator=";"/>
</xsl:function>
这里的命名空间前缀my
可以根据自己的喜好来定义。