Next in thread → Next in month →

Re: [xml-dev] XSLT 2.0: Definition of a structure and its use

From
Agnisys Technology (P) Ltd. <>
To
David Carlisle <>
Date
2005-09-14T16:01:58Z
ID
<>
Thread
Re: [xml-dev] XSLT 2.0: Definition of a structure and its use
Thanks David, I got that working!

Here is the final stylesheet ...

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="2.0">
   
    <xsl:template match="*" mode="pass1">
        <xsl:copy>
            <xsl:copy-of select="@*"/>
            <xsl:apply-templates mode="#current"/>
        </xsl:copy>
    </xsl:template>
    
    <xsl:template match="reg[@href]" mode="pass1">
        <xsl:variable name="x" >
            <xsl:copy-of select="//regdef[@name=current()/@href]/*"/>
         </xsl:variable>
        <xsl:apply-templates select="$x" mode="#current"/>
    </xsl:template>
    
    <xsl:template match="regdef" mode="pass1"/>
        
    <xsl:template match="reg" mode="pass2">
        <br/>Register = <xsl:value-of select="."/>
           Parent Offset = <xsl:value-of select="../@offset"/>
           Sibling count = <xsl:value-of  select="count(preceding-sibling::reg)"/>
     </xsl:template>
    
    <xsl:template match="/">
        <xsl:variable name="x">
            <xsl:apply-templates mode="pass1"/>
        </xsl:variable>
        <xsl:apply-templates mode="pass2" select="$x"/>
    </xsl:template>
    
</xsl:stylesheet>

Anupam.


--- David Carlisle <> wrote:

> 
> > I am sorry, that is what I don't understand. How to do two transforms in succession?
> 
> well the simplest is to write the result of the first transform out as a
> file and then just process the file. It's best to do it that way while
> debugging as you get to see the intermediate stage.
> 
> Most API allow you to avoid the overhead of serialising and writing to a
> file and parsing it back, and just pass the output tree from one to the
> other, but that depends entirely on the api you are using to call xslt.
> 
> You can however do it in one stylesheet if it is more convenient, since
> you are using 2.0 you don't need x:node-set() just store the modified
> tree in a variable then apply templates to that:
> 
> 
> <xsl:template match="/">
> <xsl:variable name="x">
>  <xsl:apply-templates mode="pass1"/>
> </xsl:variable>
> </xsl:apply-templates mode="pass2" select="$x"/>
> </xsl:template>
> 
> Then have templates in pass1 mode that just expand references, and
> templates in pass2 mode that do whatever you want to do.
> 
> David
> 
> ________________________________________________________________________
> 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
> ________________________________________________________________________
> 
> -----------------------------------------------------------------
> The xml-dev list is sponsored by XML.org <http://www.xml.org>, an
> initiative of OASIS <http://www.oasis-open.org>
> 
> The list archives are at http://lists.xml.org/archives/xml-dev/
> 
> To subscribe or unsubscribe from this list use the subscription
> manager: <http://www.oasis-open.org/mlmanage/index.php>
> 
> 



		
__________________________________ 
Yahoo! Mail - PC Magazine Editors' Choice 2005 
http://mail.yahoo.com
Next in thread → Next in month →