繁体   English   中英

XSLT 2.0函数可以返回任意类型吗?

[英]Can an XSLT 2.0 function return arbitrary types?

我正在尝试编写一个返回特定类型结果的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>

这是我从Saxon处理器得到的错误:

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>

感谢迈克尔和吉姆抓住我原来的疏忽......

我认为问题是你应该删除最终的<xsl:value-of...> value-of产生一个文本节点,这不是你想要的。 序列构造函数已包含您想要输出的节点。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM