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: Pablo Sebastián Rodriguez <psrodriguez@xxxxxxxxxxxxxxxx>
Date: Wed, 5 Mar 2008 09:56:58 -0300 (ART)
wow ! really nice trick ... not quite what i was looking for, but it'll
get the job done, thanks.
i think i wasn't clear enough

with

<music>

    <project name="W.A.S.T.E.">
        <release name="We all seek total entropy" year="2003"/>
        <release name="Violent delights" year="2006"/>
    </project>

</music>

i get

attrName: name
attrValue: W.A.S.T.E.


if i had

<music>

    <project name="W.A.S.T.E." newThing="qwertyu">
        <release name="We all seek total entropy" year="2003"/>
        <release name="Violent delights" year="2006"/>
    </project>

</music>

the result would be

attrName: name
attrValue: W.A.S.T.E

attrName: newThing
attrValue: qwertyu


thanks again

> 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