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