Subject: Re: [xsl] xsl:number and including nodes with xsl:key From: Wendell Piez <wapiez@xxxxxxxxxxxxxxxx> Date: Fri, 29 Aug 2003 11:57:07 -0400 |
Cheers, Wendell
Michael, your pointer to that earlier discussion did the trick. Thanks to you and Bill for the responses.
Just for posterity's sake, here's what I did:
=== Input xml: ===
<test> <extra myid="extraid"><name>Extra item</name></extra> <item> <name>Item one</name> <name>Item two</name> <name>Item three</name> <insert ref="extraid"/> </item> </test>
=== XSL ===
<?xml version="1.0" encoding="UTF-8"?> <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:xalan="http://xml.apache.org/xalan" >
<xsl:key name="testkey" match="extra" use="@myid"/>
<!-- process the source tree to do inclusions, then process that result tree
as a new source tree -->
<xsl:template match="/">
<xsl:variable name="transcluded-doc">
<xsl:call-template name="do-transclusion"/>
</xsl:variable>
<xsl:apply-templates select="xalan:nodeset($transcluded-doc)" mode="normal"/>
</xsl:template>
<!-- templates for copy mode -->
<!-- identity transform for copying source tree to interim result tree --> <xsl:template match="@*|node()" name="do-transclusion" mode="copy"> <xsl:copy> <xsl:apply-templates select="@*|node()" mode="copy"/> </xsl:copy> </xsl:template>
<!-- don't output 'extra' nodes to the interim tree; they'll get included by 'insert' nodes --> <xsl:template match="extra" mode="copy"/>
<!-- for 'insert' nodes, insert the content of the specified 'extra' node instead. --> <xsl:template match="insert" mode="copy"> <xsl:variable name="d" select="key('testkey',@ref)"/> <xsl:for-each select="$d/name"> <xsl:copy-of select="."/> </xsl:for-each> </xsl:template>
<!-- end copy templates -->
<!-- begin output templates -->
<!-- identity transform, for testing --> <xsl:template match="@*|node()" mode="normal"> <xsl:copy> <xsl:apply-templates select="@*|node()" mode="normal"/> </xsl:copy> </xsl:template>
<!-- number the name nodes so we can see that numbering now works as we need it to. --> <xsl:template match="name" mode="normal"> <xsl:number/> - <xsl:value-of select="."/> </xsl:template>
</xsl:stylesheet>
=== output ===
<?xml version="1.0" encoding="UTF-8"?> <test>
<item> 1 - Item one 2 - Item two 3 - Item three 4 - Extra item </item> </test>
====================================================================== Wendell Piez mailto:wapiez@xxxxxxxxxxxxxxxx Mulberry Technologies, Inc. http://www.mulberrytech.com 17 West Jefferson Street Direct Phone: 301/315-9635 Suite 207 Phone: 301/315-9631 Rockville, MD 20850 Fax: 301/315-8285 ---------------------------------------------------------------------- Mulberry Technologies: A Consultancy Specializing in SGML and XML ======================================================================
Current Thread |
---|
|
<- Previous | Index | Next -> |
---|---|---|
Re: [xsl] xsl:number and including , Denis Haskin | Thread | Re: [xsl] xsl:number and including , Denis Haskin |
Re: [xsl] Re: Problem with Paramete, Wendell Piez | Date | Re: [xsl] xsl sort query, G. Ken Holman |
Month |