"W. Eliot Kimber" wrote:
Hmm. What doesn't happen when I use this improved code is copying of the
namespace nodes from the xsl:stylesheet document, as happens in normal
output (that is, if I don't go through this initial xinclude step).
Double hmm--it works fine now. Not sure what I was doing.
Here's my revised code. In addition to Jeni's changes, I added a check
to look for include elements in the top-level document and therefore
avoid extra processing if nothing is actually included:
<xsl:template match="/">
<xsl:choose>
<xsl:when test="//xi:include">
<xsl:variable name="resolved-doc">
<xsl:apply-templates mode="xinclude"/>
</xsl:variable>
<xsl:apply-templates select="$resolved-doc" mode="normal"/>
</xsl:when>
<xsl:otherwise>
<xsl:apply-templates/>
</xsl:otherwise>
</xsl:choose>
</xsl:template>
<xsl:template match="/" mode="normal">
<xsl:apply-templates/>
</xsl:template>
<xsl:template match="node() | @*" mode="xinclude">
<xsl:copy>
<xsl:apply-templates select="@* | node()" mode="xinclude" />
</xsl:copy>
</xsl:template>
<xsl:template match="xi:include" mode="xinclude">
<xsl:variable name="xpath" select="@xi:href"/>
<xsl:choose>
<xsl:when test="$xpath != ''">
<xsl:message>Including <xsl:value-of
select="$xpath"/></xsl:message>
<xsl:apply-templates select="document($xpath)" mode="xinclude"/>
</xsl:when>
<xsl:otherwise>
<xsl:message>Xinclude: Failed to get a value for the xi:href=
attribute of xi:include element.</xsl:message>
</xsl:otherwise>
</xsl:choose>
</xsl:template>
--
W. Eliot Kimber, eliot(_at_)isogen(_dot_)com
Consultant, ISOGEN International
1016 La Posada Dr., Suite 240
Austin, TX 78752 Phone: 512.656.4139
XSL-List info and archive: http://www.mulberrytech.com/xsl/xsl-list