xsl-list
[Top] [All Lists]

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

2008-03-05 05:58:34
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



--~------------------------------------------------------------------
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>
--~--





--~------------------------------------------------------------------
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>
--~--