|
[XSL-LIST Mailing List Archive Home] [By Thread] [By Date] [Recent Entries] [Reply To This Message] Re: Find elements whose ancestors are the same
Ted,
In XSLT 2.0, this is much easier with a key: <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="2.0"> <xsl:key name="folder-by-ancestry" match="folder" use="string-join(ancestor-or-self::*/@name,'#')"/> <xsl:template match="folder"> <xsl:copy-of select="key('folder-by-ancestry',string-join(ancestor-or-self::*/@name,'#'))"/> </xsl:template> </xsl:stylesheet> (# is used as a delimiter on the assumption it's not allowed inside names.) Unfortunately, XSLT/XPath 1.0 give no function that allows you to stitch together all the names you need into a single key value. Accordingly I'd probably use two passes to do this in 1.0: in the first pass, annotate all the elements with a code (created by walking through the tree and collecting @name attributes); in the second, retrieve elements with the same code. Pass 1: <xsl:template match="folder">
<xsl:copy>
<xsl:copy-of select="@*"/>
<xsl:attribute name="ancestry">
<xsl:for-each select="ancestor-or-self::*/@name">
<xsl:value-of select="."/>
<xsl:text>#</xsl:text>
</xsl:for-each>
</xsl:attribute>
</xsl:copy>
</xsl:template>Pass 2 <xsl:key name="folder-by-ancestry" match="folder" use="@ancestry"/> <xsl:template match="folder">
<xsl:variable name="ancestry">
<xsl:for-each select="ancestor-or-self::*/@name">
<xsl:value-of select="."/>
</xsl:for-each>
</xsl:variable>
<xsl:copy-of select="key('folder-by-ancestry',$ancestry)"/>
</xsl:template>Cheers, Wendell I'd At 04:38 PM 9/26/2005, you wrote: Thanks again to everyone who has replied to these messages. I had no idea how hard this would be. It seemed so simple when I explained it to the client ;-) ====================================================================== 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 ======================================================================
|
PURCHASE STYLUS STUDIO ONLINE TODAY!Purchasing Stylus Studio from our online shop is Easy, Secure and Value Priced! Download The World's Best XML IDE!Accelerate XML development with our award-winning XML IDE - Download a free trial today! Subscribe in XML format
|

Cart








