|
[XSL-LIST Mailing List Archive Home] [By Thread] [By Date] [Recent Entries] [Reply To This Message] Re: Recursive substitution
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
|
PURCHASE STYLUS STUDIO ONLINE TODAY!Purchasing Stylus Studio from our online shop is Easy, Secure and Value Priced! Download The World's Best XML IDE!Accelerate XML development with our award-winning XML IDE - Download a free trial today! Subscribe in XML format
|

Cart








