xml - Can an XSLT 2.0 function return arbitrary types? -
i trying write xslt 2.0 function returns result of specific type--let's 1 or more elements. here's i've tried, no avail:
<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>
here's error saxon processor:
error @ xsl:function on line 192 column 65 of file:/e:/mlsh/recursive.xsl: xtte0780: required item type of result of function util:find-parents2() element(parent, xs:anytype); supplied value has item type text() failed compile stylesheet. 1 error detected.
but expected this:
<parent>one</parent> <parent>two</parent>
what missing here? thought had specified appropriate type $output (one or more <parent>
elements), processor isn't getting message , seeing text. how can return list of <parent>
elements here? in advance...
update:
summarizing, answer question in title 'yes'. key in original example difference between <xsl:value-of>
, <xsl:sequence>
. replacing former latter 1 way desired behavior. way 'unwrap' contents <xsl:variable>
element, makes things bit tidier:
<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>
thanks michael , jim catching original oversight...
i believe problem should remove final <xsl:value-of...>
. value-of
produces text node, not want. sequence constructor contains nodes want output.
Comments
Post a Comment