This is the mail archive of the
xsl-list@mulberrytech.com
mailing list .
RE: variable as select for template
- To: "'xsl-list at lists dot mulberrytech dot com'" <xsl-list at lists dot mulberrytech dot com>
- Subject: RE: [xsl] variable as select for template
- From: Dmitri Ilyin <dmitri dot ilyin at memIQ dot com>
- Date: Wed, 19 Sep 2001 18:36:07 +0200
- Reply-To: xsl-list at lists dot mulberrytech dot com
> -----Original Message-----
> From: Jörg Heinicke [mailto:Joerg.Heinicke@gmx.de]
> Sent: Wednesday, September 19, 2001 5:42 PM
> To: xsl-list@lists.mulberrytech.com
> Subject: RE: [xsl] variable as select for template
>
>
> > > > I'd like to make it with <xsl:value-of...> or something else
> > > > because i have
> > > > to decide on the fly which node set i need. My thought was
> > > > may be i can use
> > > > document() function here???
> > >
> > > I think you need to explain what you're trying to achieve.
> > > Your solution
> > > isn't going to work, because xsl:value-of produces text as
> > > its result, not a
> > > node-set.
> > >
> > > Mike Kay
> >
> > That was my try (it's a fragment):
> >
> > <xsl:variable name="parent_comp"> <!-- I wanted to get a
> node set in
> > variable -->
> > <xsl:choose>
> > <xsl:when test="$comp_id=''"> <!-- the node set depends on a
> > condition
> > -->
> > <xsl:value-of select="component[@class=$comp_class and
> not(@id)]"/>
> > </xsl:when>
> > <xsl:otherwise>
> > <xsl:value-of select="component[@class=$comp_class and
> > @id=$comp_id]"/>
> > </xsl:otherwise>
> > </xsl:choose>
> > </xsl:variable>
> >
> > then i could use variable $parent_comp just as node set
> here and in other
> > places in stylesheet:
> > <xsl:apply-templates mode="extract_property" select="$parent_comp">
> >
> > If <xsl:value-of select"..."/> always get text() as result,
> are there any
> > solutions???
> >
> > thanks for advise
> >
> > Dmitri
>
> A solution would be <xsl:copy-of
> select="component[condition]"/> instead of
> you <xsl:value-of select=""/>.
>
Hmmm. Have I understood you right???
I've tried to put instead of <xsl:value-of...> <xsl:copy-of ...> in
<xsl:variable>
as next:
<xsl:variable name="parent_comp">
<xsl:choose>
<xsl:when test="$comp_id=''">
<xsl:copy-of select="component[@class=$comp_class and not(@id)]"/>
</xsl:when>
<xsl:otherwise>
<xsl:copy-of select="component[@class=$comp_class and @id=$comp_id]"/>
</xsl:otherwise>
</xsl:choose>
</xsl:variable>
the call <xsl:apply-templates select="$parent_comp">
brings me:
XSLT Error (javax.xml.transform.TransformerException): Can not convert
#RTREEFRAG to a NodeList!
It seems to me the only solutions is to use nodeset() function. But I don't
want to do it because
i'd like my stylesheet stays "cross processor".
> Problem: You have now stored a ResultTreeFragment in your
> variable. For
> changing the RTF into a nodeset you need an extension like
> msxsl:node-set() or
> xalan:nodeset().
>
> Joerg
>
> --
> GMX - Die Kommunikationsplattform im Internet.
> http://www.gmx.net
>
>
> XSL-List info and archive: http://www.mulberrytech.com/xsl/xsl-list
>
XSL-List info and archive: http://www.mulberrytech.com/xsl/xsl-list