xsl-list
[Top] [All Lists]

RE: Is it possible to modify the source-tree?

2005-09-13 07:30:00
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>
--~--