[XSL-LIST Mailing List Archive Home] [By Thread] [By Date]

RE: [xsl] add an attribute to an element, then use it in another template


Subject: RE: [xsl] add an attribute to an element, then use it in another template
From: "Michael Kay" <mike@xxxxxxxxxxxx>
Date: Tue, 4 Mar 2008 19:07:04 -0000

In XSLT 2.0 you can do:

<xsl:template match="music">
     <xsl:call-template name="attr">
          <xsl:with-param name="stuff" select="project"/>
     </xsl:call-template>
     <xsl:call-template name="attr">
          <xsl:with-param name="stuff" as="element()*">
             <project newThing="whoKnowsWhat"/>
             <project adadad="qwertyu"/>
          </xsl:with-param>
     </xsl:call-template
</xsl:template>

Alternatively you can do a 2-phase transformation: phase one takes the input
and adds a couple of attributes, phase 2 applies your current logic.

Michael Kay
http://www.saxonica.com/

> hi,
> i'm new using xsl, so please be patient... ;-)
> 
> the input is something like this:
> 
> <music>
> 
>     <project name="W.A.S.T.E">
>         <release name="We all seek total entropy" year="2003"/>
>         <release name="Violent delights" year="2006"/>
>     </project>
> 
>     <project name="Winterkalte">
>         <release name="Structures of Destruction" year="1997"/>
>         <release name="Drum 'n' noise" year="1999"/>
>     </project>
> 
> </music>
> 
> 
> the xsl:
> 
>     <xsl:template match="music">
>         <xsl:call-template name="attr">
>             <xsl:with-param name="stuff" select="project"/>
>         </xsl:call-template>
>     </xsl:template>
> 
>     <xsl:template name="attr">
>         <xsl:param name="stuff"/>
>         <xsl:for-each select="$stuff/@*">
> 
>         attrName: <xsl:value-of select="name()"/>
>         attrValue: <xsl:value-of select="."/>
> 
>         </xsl:for-each>
>     </xsl:template>
> 
> the output:
> 
> attrName: name
> attrValue: W.A.S.T.E
> 
> attrName: name
> attrValue: Winterkalte
> 
> 
> what i'm trying to do is add an attribute so the output will be:
> 
> attrName: newThing
> attrValue: whoKnowsWhat
> 
> attrName: name
> attrValue: W.A.S.T.E
> 
> attrName: name
> attrValue: Winterkalte
> 
> attrName: adadad
> attrValue qwertyu
> 
> i tried using <xsl:attribute> but i can't make it work... any ideas ?
> 
> thanks


Current Thread
Keywords