On Thursday 12 September 2002 03:25, Cédric Claus wrote:
Now I want to do a dynamic include depending on a tag of my XML document.
For example:
xml: <include>page1.xsl<include>
principal.xsl : <xsl:include><xsl:attribute name="href"><xsl:valueof
select"include"/></xsl:attribute></xsl:include>
I see a couple options, probably not the only ones:
* If you can make your processor support it, use the <?xml-stylesheet?>
processing instruction to point to an XSL file that includes the custom
stylesheet and also the principal stylesheet. The processing-instruction
replaces the <include> tag.
For example:
+ In your XML:
<?xml-stylesheet href="include-page1.xsl"?>
<other-tags>
...
</other-tags>
+ In include-page1.xsl:
<xsl:stylesheet ...>
<xsl:include href="path/to/principal.xsl"/>
<xsl:template name="custom-processing-for-page1">
...
</xsl:template>
</xsl:stylesheet>
* Or, why not make the source XML with the <include> tag into a stylesheet of
its own? This will involve two stages of processing: the first outputs a
stylesheet containing only the <xsl:include> elements, and the second uses
the newly generated stylesheet to re-process the data using the included
stylesheets. For example:
+ Output from first stage:
<xsl:stylesheet ...>
<xsl:include href="principal.xsl"/>
<!-- taken from <include> element -->
<xsl:include href="page1.xsl"/>
</xsl:stylesheet>
+ Second stage uses the first stage's output stylesheet, and processes the
input XML again (this time ignoring the <include> element).
It should be possible to optimize the two stages to keep from parsing the
source XML twice, by reusing the DOM tree if the data will fit into RAM.
HTH
--
Peter Davis
XSL-List info and archive: http://www.mulberrytech.com/xsl/xsl-list