| 
 
Subject: [xsl] A very interesting feature of MSXML From: "Alexander Gutman" <gutman@xxxxxxxxxxxxxxx> Date: Sat, 11 Aug 2001 19:58:02 +0700  | 
Hello, friends.
I have just discovered a very interesting feature of MSXML.
If we transform this:
  <root>
    <one/>
    <two/>
    <three/>
  </root>
via this:
  <xsl:transform version="1.0"
    xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
    xmlns:msxsl="urn:schemas-microsoft-com:xslt"
    xmlns:x="urn:x">
    <msxsl:script language="JScript" implements-prefix="x">
      var m = 'old';
      function setMode(newMode){ m = newMode; return 'changed' }
      function mode(){ return m }
    </msxsl:script>
    <xsl:template match="/root" priority="1">
      <result>
        <xsl:apply-templates select="*"/>
      </result>
    </xsl:template>
    <xsl:template match="*[x:mode()='old']">
      <xsl:copy>
        <xsl:attribute name="mode">old</xsl:attribute>
      </xsl:copy>
    </xsl:template>
    <xsl:template match="*[x:mode()='new']">
      <xsl:copy>
        <xsl:attribute name="mode">new</xsl:attribute>
      </xsl:copy>
    </xsl:template>
    <xsl:template match="two" priority="1">
      <two mode="{x:setMode('new')}"/>
    </xsl:template>
  </xsl:transform>
then we obtain:
  <result>
    <one mode="old"/>
    <two mode="changed"/>
    <three mode="new"/>
  </result>
I did not believe it would work, but it works!
I am not sure that this behavior is standards-driven,
but it is very convenient.
-- 
Alexander E. Gutman
 XSL-List info and archive:  http://www.mulberrytech.com/xsl/xsl-list
| Current Thread | 
|---|
  | 
| <- Previous | Index | Next -> | 
|---|---|---|
| RE: [xsl] Conditional initialisatio, Oleg Tkachenko | Thread | RE: [xsl] A very interesting featur, Oleg Tkachenko | 
| [xsl] Conditional initialisation of, Michael Beddow | Date | RE: [xsl] Retrieving Full XPATH exp, Tom Landon | 
| Month |