Sign In | Register Now About Bytes | Help | Site Map
Connecting Tech Pros Worldwide

How to simplify?

Question posted by: Hvid Hat (Guest) on June 27th, 2008 07:07 PM
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.
Martin Honnen's Avatar
Martin Honnen
Guest
n/a Posts
June 27th, 2008
07:07 PM
#2

Re: How to simplify?
Hvid Hat wrote:
Quote:
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/

Hvid Hat's Avatar
Hvid Hat
Guest
n/a Posts
June 27th, 2008
07:07 PM
#3

Re: How to simplify?
On 07-06-2008 14:27:36, Martin Honnen wrote:
Quote:
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.

Peter Flynn's Avatar
Peter Flynn
Guest
n/a Posts
June 27th, 2008
07:07 PM
#4

Re: How to simplify?
Hvid Hat wrote:
Quote:
On 07-06-2008 14:27:36, Martin Honnen wrote:
>
Quote:
>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/

 
Not the answer you were looking for? Post your question . . .
189,075 Experts ready to help you find a solution.
Sign up for a free account, or Login (if you're already a member).

Latest Articles: Read & Comment
  • Didn't find the answer you were looking for?
    Post Your Question
  • Top Community Contributors