How to simplify?

Discussion in 'XML' started by Hvid Hat, Jun 7, 2008.

  1. Hvid Hat

    Hvid Hat Guest

    Hi

    I've got the following XSLT that works but I'm trying to figure out how to
    simplify it. There is only one Image, so I don't need the for-each-loop.
    Anyone?

    <xsl:for-each select="Data[@Name='Image']/img">
    <xsl:copy>
    <xsl:copy-of select="@*"/>
    <xsl:attribute name="class">right</xsl:attribute>
    <xsl:apply-templates/>
    </xsl:copy>
    </xsl:for-each>

    The code adds a class attribute named right to the given img-tag.
     
    Hvid Hat, Jun 7, 2008
    #1
    1. Advertising

  2. Hvid Hat wrote:

    > I've got the following XSLT that works but I'm trying to figure out how to
    > simplify it. There is only one Image, so I don't need the for-each-loop.
    > Anyone?
    >
    > <xsl:for-each select="Data[@Name='Image']/img">
    > <xsl:copy>
    > <xsl:copy-of select="@*"/>
    > <xsl:attribute name="class">right</xsl:attribute>
    > <xsl:apply-templates/>
    > </xsl:copy>
    > </xsl:for-each>


    xsl:copy needs a context node so I don't think you can get rid of the
    xsl:for-each as that sets up the 'img' element as the context node.
    If that stylesheet creates HTML or XHTML then you could drop the
    xsl:apply-templates as 'img' elements in HTML or XHTML are empty.


    --

    Martin Honnen
    http://JavaScript.FAQTs.com/
     
    Martin Honnen, Jun 7, 2008
    #2
    1. Advertising

  3. Hvid Hat

    Hvid Hat Guest

    On 07-06-2008 14:27:36, Martin Honnen wrote:

    > xsl:copy needs a context node so I don't think you can get rid of the
    > xsl:for-each as that sets up the 'img' element as the context node.
    > If that stylesheet creates HTML or XHTML then you could drop the
    > xsl:apply-templates as 'img' elements in HTML or XHTML are empty.


    Too bad. The for-each kinda tortures my eyes when knowing there's only one
    element :) Thanks for the tip about removing apply-templates.

    I've just sent another message to the group about something related. Maybe
    you could answer it? Is it somehow possible to write a generic template that
    adds a given attribute name with a given attribute value to a give node? E.g.
    if I had a node, e.g. <node id="1"/>, then I'd like to call a template with
    this node and attribute name/value like class/blue and the result would be
    <node id="1" class="blue" />.

    Otherwise I'm thinking about doing it with C# code in the XSLT but I'd like
    to avoid C# if possible.
     
    Hvid Hat, Jun 7, 2008
    #3
  4. Hvid Hat

    Peter Flynn Guest

    Hvid Hat wrote:
    > On 07-06-2008 14:27:36, Martin Honnen wrote:
    >
    >> xsl:copy needs a context node so I don't think you can get rid of the
    >> xsl:for-each as that sets up the 'img' element as the context node.
    >> If that stylesheet creates HTML or XHTML then you could drop the
    >> xsl:apply-templates as 'img' elements in HTML or XHTML are empty.

    >
    > Too bad. The for-each kinda tortures my eyes when knowing there's only one
    > element :) Thanks for the tip about removing apply-templates.
    >
    > I've just sent another message to the group about something related. Maybe
    > you could answer it? Is it somehow possible to write a generic template that
    > adds a given attribute name with a given attribute value to a give node? E.g.
    > if I had a node, e.g. <node id="1"/>, then I'd like to call a template with
    > this node and attribute name/value like class/blue and the result would be
    > <node id="1" class="blue" />.
    >
    > Otherwise I'm thinking about doing it with C# code in the XSLT but I'd like
    > to avoid C# if possible.


    <xsl:template match="*"> can be used to catch all nodes not otherwise
    specified in your XSL[T] document.

    Otherwise write a named template that does what you need, and use
    xsl:call-template at the relevant point in the processing of all your
    other templates.

    ///Peter
    --
    XML FAQ: http://xml.silmaril.ie/
     
    Peter Flynn, Jun 7, 2008
    #4
    1. Advertising

Want to reply to this thread or ask your own question?

It takes just 2 minutes to sign up (and it's free!). Just click the sign up button to choose a username and then you can ask your own questions on the forum.
Similar Threads
  1. Juan Carlos Allica
    Replies:
    2
    Views:
    694
    Noway2
    Jan 25, 2006
  2. Gerhard Rapp

    How to simplify logical expressions?

    Gerhard Rapp, Jul 29, 2003, in forum: Java
    Replies:
    2
    Views:
    1,268
    Peter Schoaff
    Jul 30, 2003
  3. Dean Rettig
    Replies:
    2
    Views:
    7,792
    Oscar Kind
    Jan 6, 2004
  4. davout
    Replies:
    5
    Views:
    780
    Bryce
    Aug 17, 2004
  5. Replies:
    7
    Views:
    541
Loading...

Share This Page