468,315 Members | 1,442 Online
Bytes | Developer Community
New Post

Home Posts Topics Members FAQ

Post your question to a community of 468,315 developers. It's quick & easy.

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: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.
Jun 27 '08 #1
3 1186
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/
Jun 27 '08 #2
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.
Jun 27 '08 #3
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/
Jun 27 '08 #4

This discussion thread is closed

Replies have been disabled for this discussion.

Similar topics

22 posts views Thread by Alan | last post: by
29 posts views Thread by Flzw | last post: by
3 posts views Thread by Bob Bedford | last post: by
6 posts views Thread by Patrick | last post: by
AmLegacy
1 post views Thread by AmLegacy | last post: by
reply views Thread by Teichintx | last post: by
By using this site, you agree to our Privacy Policy and Terms of Use.