Subject: RE: [xsl] extend an xslt template defined elsewhere? From: "Scott Trenda" <Scott.Trenda@xxxxxxxx> Date: Fri, 19 Oct 2007 14:18:30 -0500 |
Since the attribute has to go at the top of the template, you're stuck doing another "copy-except-for-glossdef" transformation on the docbook-transformed data, UNLESS the following is true for your purposes in this case: - Your docbook.xsl stylesheet gives glossdef's output dd an attribute-set, like the following: (NOTE: this would be defined in docbook.xsl) <xsl:attribute-set name="glossdef"> <xsl:attribute name="attr1">attribute one</xsl:attribute> <xsl:attribute name="attr2">attribute two</xsl:attribute> </xsl:attribute-set> <xsl:template match="glossentry/glossdef"> <dd xsl:use-attribute-sets="glossdef"> ... internal stuff here ... </dd> </xsl:template> - Your output would be valid if the glossdef-dd's class attribute was either empty (or had a different value) in the case that the glossdef/@role attribute was empty in the input. (e.g. <glossdef role=""/> => <dd class=""/>) If this IS the case, you can do this: <xsl:import href="docbook.xsl"/> <xsl:attribute-set name="glossdef"> <xsl:attribute name="class"> <xsl:value-of select="@role"/> </xsl:attribute> </xsl:attribute-set> Attribute-sets with the same name are allowed to be declared in an imported stylesheet and the importing stylesheet at the same time; when this happens, the two are merged, and if any attributes with the same name declared in both, the one with the highest import precedence (the importing stylesheet's one, in this case) will win. It's a bit of a fringe case here, but definitely a good example of why <xsl:attribute-set/> is useful. If you have control over docbook.xsl and frequently import it into other stylesheets, I'd recommend declaring attribute-sets to correspond to the output elements in the main templates, for reasons like this one. It allows you more control over exactly what can be extended later. ~ Scott -----Original Message----- From: ettinger@xxxxxxxxx [mailto:ettinger@xxxxxxxxx] On Behalf Of Anthony Ettinger Sent: Friday, October 19, 2007 12:34 PM To: xsl-list@xxxxxxxxxxxxxxxxxxxxxx Subject: Re: [xsl] extend an xslt template defined elsewhere? On 10/17/07, Scott Trenda <Scott.Trenda@xxxxxxxx> wrote: > <xsl:import href="docbook.xsl"/> > <xsl:template match="orderedlist"> > <xsl:if test="@role = 'html class real code goes here'"> > <xsl:apply-imports/> > </xsl:if> > </xsl:template> > > ~ Scott > > I'm seeing a problem with my rule: <xsl:template match="glossentry/glossdef"> <dd> <xsl:if test="@role != ''"> <xsl:attribute name="class"> <xsl:value-of select="@role"/> </xsl:attribute> </xsl:if> <xsl:apply-imports /> </dd> </xsl:template> The apply-imports is creating another level of <dd> nesting in the output...is there a way to avoid this? I still need to process the exisiting docbook glossdef template though. -- Anthony Ettinger Ph: 408-656-2473 var (bonita, farley) = new Dog; farley.barks("very loud"); bonita.barks("at strangers"); http://chovy.dyndns.org/resume/ http://utuxia.com/consulting
Current Thread |
---|
|
<- Previous | Index | Next -> |
---|---|---|
Re: [xsl] extend an xslt template d, Anthony Ettinger | Thread | Re: [xsl] extend an xslt template d, Anthony Ettinger |
[xsl] FO:Marker issues, Rush, Jeff | Date | Re: [xsl] extend an xslt template d, Anthony Ettinger |
Month |