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 |
---|
|
<- Previous | Index | Next -> |
---|---|---|
RE: [xsl] add an attribute to an el, Michael Kay | Thread | Re: [xsl] add an attribute to an el, Vyacheslav Sedov |
[xsl] Errors with JAXP, igutierrez027 | Date | Re: [xsl] Errors with JAXP, David Carlisle |
Month |