[XSL-LIST Mailing List Archive Home] [By Thread] [By Date]

RE: [xsl] Adding a border to graphics


Subject: RE: [xsl] Adding a border to graphics
From: "Michael Kay" <mike@xxxxxxxxxxxx>
Date: Tue, 30 Oct 2007 13:19:15 -0000

When you say "it didn't work", you mean it didn't do what you expected it to
do: so to deal with your problem I have to look at your incorrect code and
try and work out what you thought it might do.

Sorry if I'm guessing wrong, but you seem to be imagining that when you
write an <imagedata> element to the result tree, the template with
match="imagedata" is going to magically involved to post-process it, and
perhaps that the output of this template is going to magically replace the
element that was matched in the tree. If so, then I'm afraid you're guilty
of wishful thinking!

There are many ways you could tackle this problem, but the one that's
closest to your design is to write the <imagedata> element to a variable,
and then call apply-templates on this variable. You can then have two
variants ot the template that process this element (one of which might do
nothing). Note that to apply templates to a temporary tree you either need
XSLT 2.0, or a 1.0 processor with the xx:node-set() extension.

Michael Kay
http://www.saxonica.com/

> 
> So I did two things:
> 
> 1) in my template for bordered images I inserted a "role" 
> attribute with value "bordered" like that:
> 
> <xsl:template match="diagram_border">
> <xsl:element name="figure">
>     <xsl:attribute name="id">
>       <xsl:value-of select="@ref"/>
>     </xsl:attribute>
>     <xsl:attribute name="role">
>     <xsl:value-of select="@bordered"/>
>     </xsl:attribute>	    
>     <title>
>       <xsl:value-of select="@t"/>
>     </title>
>     <mediaobject>
>       <imageobject>
>         <xsl:element name="imagedata">
>           <xsl:attribute
> name="width">80%</xsl:attribute>
>           <xsl:attribute
> name="scalefit">1</xsl:attribute>
>           <xsl:attribute name="fileref">
> 	  <xsl:value-of select="concat('images/', @ref, '.png')"/>
>           </xsl:attribute>
>         </xsl:element>
>       </imageobject>
>     </mediaobject>
>   </xsl:element>
> </xsl:template>
> 
> 
> 2) I added the following in the customization layer:
> 
> <xsl:template match="imagedata">
> <fo:external-graphic>
>     <xsl:if test="ancestor::figure[role|@bordered]">
>     <xsl:attribute
> name="border-color">black</xsl:attribute>
>     <xsl:attribute
> name="border-style">solid</xsl:attribute>
>     </xsl:if>
> </fo:external-graphic>
> </xsl:template>
> 
> However, it does not work. Please, advise!
> 
> Thanks in advance,
> Nancy
> 
> 
> __________________________________________________
> Do You Yahoo!?
> Tired of spam?  Yahoo! Mail has the best spam protection around 
> http://mail.yahoo.com 


Current Thread
Keywords