The general approach to writing a multiphase transformation in one
stylesheet is
<xsl:variable name="v1">
<xsl:apply-templates select="/" mode="phase1"/>
</xsl:variable>
<xsl:variable name="v2">
<xsl:apply-templates select="xx:node-set($v1)" mode="phase2"/>
</xsl:variable>
<xsl:variable name="v3">
<xsl:apply-templates select="xx:node-set($v2)" mode="phase3"/>
</xsl:variable>
<xsl:template match="/">
<xsl:apply-templates select="xx:node-set($v3)" mode="phase4"/>
</xsl:template>
In 2.0 you don't need the calls on xx:node-set().
So you give these preprocessing templates a mode of "phase1" and invoke the
processing as in the example above.
Michael Kay
http://www.saxonica.com/
-----Original Message-----
From: Agnisys Technology (P) Ltd. [mailto:agnisys(_at_)yahoo(_dot_)com]
Sent: 13 September 2005 14:57
To: xsl-list(_at_)lists(_dot_)mulberrytech(_dot_)com
Subject: RE: [xsl] Is it possible to modify the source-tree?
Hi Michael,
Could you please explain how to have the results of all the
templates you provided go into a
variable? And be passed to a template like the one below ...
<xsl:template match="reg">
<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>
Appreciating your help.
Anupam.
--- Michael Kay <mike(_at_)saxonica(_dot_)com> wrote:
Start with an identity template:
<xsl:template match="*">
<xsl:copy>
<xsl:copy-of select="@*"/>
<xsl:apply-templates/>
</xsl:copy>
</xsl:template>
Add a template to handle the href:
<xsl:template match="reg[(_at_)href]">
<xsl:copy-of select="//regdef[(_at_)name=current()/@href]"/>
</xsl:template>
And another template to avoid copying the regdef:
<xsl:template match="regdef"/>
This creates the document that you say you want to form the
*input* to the
transformation. So you want a pipeline of two
transformations: first the one
above, then the other one you had in mind. You can either
write the two
transformations as part of the same stylesheet (using
modes, with a variable
used to hold the result of the first transformation) or you
can put them in
separate stylesheets and organise the pipeline at the
application level.
Michael Kay
http://www.saxonica.com/
-----Original Message-----
From: Agnisys Technology (P) Ltd. [mailto:agnisys(_at_)yahoo(_dot_)com]
Sent: 13 September 2005 00:03
To: xsl-list(_at_)lists(_dot_)mulberrytech(_dot_)com
Subject: RE: [xsl] Is it possible to modify the source-tree?
My input looks like this:
<a>
<b offset="5">
<reg>reg_1</reg>
<reg href="REGDEF1"/>
</b>
<regdef name="REGDEF1">
<reg>reg_10</reg>
<reg>reg_20</reg>
</regdef>
</a>
I want the <reg href="REGDEF1"/> be replaced with the
definition defined above, namely :
<reg>reg_10</reg>
<reg>reg_20</reg>
So to the XSLT parser, the input looks like:
<a>
<b offset="5">
<reg>reg_1</reg>
<reg>reg_10</reg>
<reg>reg_20</reg>
</b>
</a>
The output is based on the attributes of the <b> node and the
siblings. If I use
<xsl:apply_templates> I will have to pass a whole bunch of
info to the template.
Thanks,
Anupam.
--- Michael Kay <mike(_at_)saxonica(_dot_)com> wrote:
The simple answer is: no.
You'll have to explain the requirement more carefully, I
can't really
understand from this what you're trying to do.
Michael Kay
http://www.saxonica.com/
__________________________________
Yahoo! Mail - PC Magazine Editors' Choice 2005
http://mail.yahoo.com
--~------------------------------------------------------------------
XSL-List info and archive:
http://www.mulberrytech.com/xsl/xsl-list
To unsubscribe, go to: http://lists.mulberrytech.com/xsl-list/
or e-mail:
<mailto:xsl-list-unsubscribe(_at_)lists(_dot_)mulberrytech(_dot_)com>
--~--
--~------------------------------------------------------------------
XSL-List info and archive: http://www.mulberrytech.com/xsl/xsl-list
To unsubscribe, go to: http://lists.mulberrytech.com/xsl-list/
or e-mail:
<mailto:xsl-list-unsubscribe(_at_)lists(_dot_)mulberrytech(_dot_)com>
--~--
__________________________________________________
Do You Yahoo!?
Tired of spam? Yahoo! Mail has the best spam protection around
http://mail.yahoo.com
--~------------------------------------------------------------------
XSL-List info and archive: http://www.mulberrytech.com/xsl/xsl-list
To unsubscribe, go to: http://lists.mulberrytech.com/xsl-list/
or e-mail:
<mailto:xsl-list-unsubscribe(_at_)lists(_dot_)mulberrytech(_dot_)com>
--~--
--~------------------------------------------------------------------
XSL-List info and archive: http://www.mulberrytech.com/xsl/xsl-list
To unsubscribe, go to: http://lists.mulberrytech.com/xsl-list/
or e-mail: <mailto:xsl-list-unsubscribe(_at_)lists(_dot_)mulberrytech(_dot_)com>
--~--