Subject: Re: [xsl] Recursive substitution From: Agnisys <agnisys@xxxxxxxxx> Date: Thu, 3 Nov 2005 12:53:14 -0800 (PST) |
Unfortunately my problem is that I did want to use a "copy-of" so that the nodes being referred to by the <ref> tag are actually "stitched" into the tree. I tried to use the following but it doesn't seem to do the job. Note the use of "copy-of" and "ancestor::define". Any pointers? Thanks, Anupam. <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="2.0"> <xsl:key name="r" match="define" use="@name"/> <xsl:template match="x"> <xsl:apply-templates select="block"/> </xsl:template> <xsl:template match="reg"> <xsl:if test="not(ancestor::define)"> Register: <xsl:value-of select="@name"/><br/> </xsl:if> </xsl:template> <xsl:template match="ref[@name]"> <xsl:variable name="x"> <xsl:copy-of select="key('r',@name)"/> </xsl:variable> <xsl:apply-templates select="$x"/> </xsl:template> </xsl:stylesheet> --- David Carlisle <davidc@xxxxxxxxx> wrote: > > I see you're using 2.0, it's best to say explictly if you want a 2.0 > answer as the current version is still 1.0 (2.0 is still in draft) > > I don't think you need to keep copying nodes and build copies of the > tree, you want to recursively walk over the existing tree not copy > branches of it: > > <x> > > <define name="DEF1"> > <reg name="REG1"/> > </define> > > <define name="DEF2"> > <reg name="REG2"/> > <ref name="DEF1"/> > </define> > > <block name="block1"> > <reg name="REG3"/> > <ref name="DEF2"/> > </block> > > </x> > > > > > > > <xsl:stylesheet version="2.0" > xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> > > <xsl:key name="r" match="define" use="@name"/> > > <xsl:template match="x"> > <xsl:apply-templates select="block"/> > </xsl:template> > > <xsl:template match="reg"> > Register: <xsl:value-of select="@name"/> > </xsl:template> > > <xsl:template match="ref"> > <xsl:apply-templates select="key('r',@name)"/> > </xsl:template> > > </xsl:stylesheet> > > > > $ saxon8 ref.xml ref.xsl > <?xml version="1.0" encoding="UTF-8"?> > > Register: REG3 > > > Register: REG2 > > > Register: REG1 > > ________________________________________________________________________ > This e-mail has been scanned for all viruses by Star. The > service is powered by MessageLabs. For more information on a proactive > anti-virus service working around the clock, around the globe, visit: > http://www.star.net.uk > ________________________________________________________________________ > > __________________________________ Yahoo! FareChase: Search multiple travel sites in one click. http://farechase.yahoo.com
Current Thread |
---|
|
<- Previous | Index | Next -> |
---|---|---|
Re: [xsl] Recursive substitution, David Carlisle | Thread | Re: [xsl] Recursive substitution, David Carlisle |
[xsl] Concordance with XSLT, Rick Quatro | Date | Re: [xsl] Concordance with XSLT, Colin Paul Adams |
Month |