我正在尝试编写一个返回特定类型结果的 XSLT 2.0 函数——比如说一个或多个元素。这是我尝试过的,但无济于事:
<xsl:function name="util:find-parents2" as="element(parent)*">
<xsl:variable name="output" as="element(parent)*">
<xsl:for-each select="('one','two')">
<parent>
<xsl:sequence select="."/>
</parent>
</xsl:for-each>
</xsl:variable>
<xsl:value-of select="$output"/>
</xsl:function>
这是我从撒克逊处理器得到的错误:
Error at xsl:function on line 192 column 65 of file:/e:/mlsh/recursive.xsl:
XTTE0780: Required item type of result of function util:find-parents2() is element(parent,
xs:anyType); supplied value has item type text() Failed to compile stylesheet. 1 error detected.
但我希望得到这样的东西:
<parent>one</parent>
<parent>two</parent>
我在这里想念什么?我以为我已经为 $output (一个或多个<parent>
元素)指定了适当的类型,但处理器显然没有收到消息并且只看到文本。如何<parent>
在此处返回元素列表?提前致谢...
更新:
总而言之,标题中问题的答案是“是”。<xsl:value-of>
原始示例中的关键是和之间的区别<xsl:sequence>
。用后者替换前者是获得所需行为的一种方法。另一种方法是从<xsl:variable>
元素中“解包”内容,这会使事情变得更整洁:
<xsl:function name="util:find-parents2" as="element(parent)*">
<xsl:for-each select="('one','two')">
<parent>
<xsl:sequence select="."/>
</parent>
</xsl:for-each>
</xsl:function>
感谢迈克尔和吉姆抓住了我最初的疏忽……