Subject: RE: [xsl] xsl 2.0 recursive functions and return value From: "Michael Kay" <mike@xxxxxxxxxxxx> Date: Sun, 26 Feb 2006 19:44:33 -0000 |
> how can i get the following to work: > > > <xsl:function name="r2c:hasTextContent" as="xs:boolean"> > <xsl:param name="node"/> > <xsl:for-each select="$node/*"> > <xsl:choose> > <!--ignore!--> > <xsl:when test="r2c:isOutputNode(.)"/> > <!--gotcha!--> > <xsl:when test="r2c:isLeafNode(.)"> > <xsl:value-of select="true()"/> > </xsl:when> Use xsl:sequence here! xsl:value-of creates a text node. You're converting a boolean to a string, wrapping the string in a text node, then because an xs:boolean is required, the text node is atomized, and the string "true" is converted back to a boolean. > <xsl:otherwise> > <!-- recurse into the current node --> > <xsl:sequence select="r2c:hasTextContent(.)"/> > </xsl:otherwise> > </xsl:choose> > </xsl:for-each> > <!-- no leafNodes found?:--> > <xsl:sequence select="false()"/> > </xsl:function> > > this will inevitably put more than one boolean into my output > sequence, > which will cause an error. Only if there is more than one leaf node. > Any hints? Try: <xsl:function name="r2c:hasTextContent()" as="xs:boolean"> <xsl:param name="node" as="node()"/> <xsl:sequence select="some $x in $node/*[not(r2c:isOutputNode(.)] satisfies (r2c.isLeafNode($x) or r2c.hasTextContent($x))"/> </xsl:function> Michael Kay http://www.saxonica.com/
Current Thread |
---|
|
<- Previous | Index | Next -> |
---|---|---|
Re: [xsl] xsl 2.0 recursive functio, Joern Nettingsmeier | Thread | Re: [xsl] xsl 2.0 recursive functio, Frans Englich |
Re: [xsl] xsl 2.0 recursive functio, Joern Nettingsmeier | Date | Re: [xsl] xsl 2.0 recursive functio, Frans Englich |
Month |