xsl-list
[Top] [All Lists]

Re: Re: Re: EXSL's dyn:evaluate() and XALAN vs. xsl:use-attribute-sets

2003-08-24 09:25:35
I would prefer a more compact solution, avoiding the possibly long and
difficult to maintain xsl:choose.

Something like this:

<xsl:stylesheet version="1.0"
 xmlns:xsl="http://www.w3.org/1999/XSL/Transform";
 xmlns:myAttribs="my:Attribs" exclude-result-prefixes="myAttribs">

 <xsl:output method="html"/>

 <myAttribs:myAttribs>
   <test1 font-family="sans-serif" font-weight="bold"/>
   <spacer1 font-family="roman" font-weight="normal"/>
 </myAttribs:myAttribs>

  <xsl:variable name="vAttribs"
       select="document('')/*/myAttribs:*"/>

  <xsl:template match="text">
   <p>
     <xsl:copy-of
      select="$vAttribs/*[name() = current()/@attribs]/@*"/>
      <xsl:apply-templates/>
   </p>
  </xsl:template>
</xsl:stylesheet>


When this transformation is applied on the following source.xml:

<t>
 <text attribs="test1">XXX</text>
 <text attribs="spacer1">YYY</text>
</t>


the wanted result is produced:


 <p font-family="sans-serif" font-weight="bold">XXX</p>
 <p font-family="roman" font-weight="normal">YYY</p>


Hope this helped.


=====
Cheers,

Dimitre Novatchev.
http://fxsl.sourceforge.net/ -- the home of FXSL
<raphead(_at_)gmx(_dot_)net> wrote in message 
news:8300(_dot_)1061728037(_at_)www51(_dot_)gmx(_dot_)net(_dot_)(_dot_)(_dot_)
A simple example: Why not include an top-level element belonging to a
non-xsl
namespace and having the necessary attributes. Then you can just copy
them.


I thought about that but I don't think that this is an solution. Right!
I
could dynamically
decide depending on a parameter to do something - in case of copy: copy
some
xml to the
current position. But this won't fix my problem as I'm working with fo
and
I
need exactly
the behaviour of the use-attribute-sets parameter which creates
attributes
from a XML-fragment.

Now I thought about using call-template but it has the same limitation:
The
name must be
qname :-/

Then you'll gradually find that the same effect can be achieved with
xsl:apply-templates

For details see:


http://fxsl.sourceforge.net/articles/FuncProg/Functional%20Programming.html


I really doubt that in this concrete case you really need so much power,
as
I have not seen your source xml document and do not know what the
transformation must do.


I think I with Michaels and your hints, I got it!

on every occurence of the relevant attribute, I'm caling a Template with the
value of the attribute. The called template decides with a switch-case like
structure
what attributes to create:

The called template looks like that.

    <xsl:template name="definitions">
<xsl:param name="selector"/>
    <xsl:choose >
                    <xsl:when test="$selector='test1'">
    <xsl:attribute name="font-family">sans-serif</xsl:attribute>
    <xsl:attribute name="font-weight">bold</xsl:attribute>
                    </xsl:when>
                    <xsl:when test="$selector='spacer1#">
    <xsl:attribute name="font-family">sans-serif</xsl:attribute>
    <xsl:attribute name="font-weight">bold</xsl:attribute>
                    </xsl:when>
               </xsl:choose>
   </xsl:template>


Thanks for your help!


=====
Cheers,

Dimitre Novatchev.
http://fxsl.sourceforge.net/ -- the home of FXSL


-- 
COMPUTERBILD 15/03: Premium-e-mail-Dienste im Test
--------------------------------------------------
1. GMX TopMail - Platz 1 und Testsieger!
2. GMX ProMail - Platz 2 und Preis-Qualitätssieger!
3. Arcor - 4. web.de - 5. T-Online - 6. freenet.de - 7. daybyday - 8. e-Post


 XSL-List info and archive:  http://www.mulberrytech.com/xsl/xsl-list





 XSL-List info and archive:  http://www.mulberrytech.com/xsl/xsl-list