xsl-list
[Top] [All Lists]

Re: Partial Implementation of XInclude include element

2002-09-24 08:14:09
"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