Subject: Re: [xsl] add an attribute to an element, then use it in another template From: "Vyacheslav Sedov" <vyacheslav.sedov@xxxxxxxxx> Date: Wed, 5 Mar 2008 16:19:56 +0300 |
look like your code work as expected - only one notice from me - it better to use push model instead pull model (or data-driven instead template-driven) try use something like <xsl:apply-templates select="bla-bla/@*" mode="pairs"> <xsl:template match="@*" mode="pairs"> attrName: <xsl:value-of select="name()"/> attrValue: <xsl:value-of select="."/> </xsl:template> On Wed, Mar 5, 2008 at 3:56 PM, Pablo Sebastian Rodriguez <psrodriguez@xxxxxxxxxxxxxxxx> wrote: > 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, Pablo Sebastián Rodr | Thread | Re: [xsl] add an attribute to an el, Pablo Sebastián Rodr |
Re: [xsl] Errors with JAXP, Robert Koberg | Date | Re: [xsl] add an attribute to an el, Florent Georges |
Month |