xsl-list
[Top] [All Lists]

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

2008-03-05 06:20:27
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 Sebastián Rodriguez
<psrodriguez(_at_)jusbaires(_dot_)gov(_dot_)ar> 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
 >>
 >>
 >>
 >> --~------------------------------------------------------------------
 >> 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>
 --~--



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