How to simplify?

Collapse
This topic is closed.
X
X
 
  • Time
  • Show
Clear All
new posts
  • Hvid Hat

    How to simplify?

    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:attribut e name="class">ri ght</xsl:attribute>
    <xsl:apply-templates/>
    </xsl:copy>
    </xsl:for-each>

    The code adds a class attribute named right to the given img-tag.
  • Martin Honnen

    #2
    Re: How to simplify?

    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:attribut e name="class">ri ght</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

    Comment

    • Hvid Hat

      #3
      Re: How to simplify?

      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.

      Comment

      • Peter Flynn

        #4
        Re: How to simplify?

        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/

        Comment

        Working...