xsl-list
[Top] [All Lists]

Re: slicing an XML document

2002-10-15 15:20:57
Saverio,

In XSLT 1.0 I'd de-duplicate the list using a key, in which the key value combines the node's name with its depth:

<xsl:key name="nodes-by-depth-and-name" match="*" use="concat(count(ancestor-or-self::*), ':', local-name())"/>

This allows you to slip a test into your for-each:

<xsl:template match="/">
  <xsl:for-each select="//*[count(ancestor-or-self::*) = $depth]">
<xsl:if test="count(. | key('nodes-by-depth-and-name', concat($depth, ':', local-name()))[1]) = 1"> <!-- the test will be true only when the node is the first with its name and depth -->
      <xsl:copy/>
    </xsl:if
  </xsl:for-each>
</xsl:template>

This is an adaptation of a Muenchian grouping technique: the key puts all the elements with the same depth and name into a group (retrieved by the key), and the test throws out all but the first in each group.

I don't know why this isn't working on your real data but it is on your pizza sample; it's not because the technique doesn't hold up at different and variable depths (it does).

Cheers,
Wendell

At 05:16 PM 10/15/2002, you wrote:
On Tue, 15 Oct 2002, Wendell Piez wrote:

> You could do something like:
>
> <xsl:param name="depth" select="3"/>
>
> <xsl:template match="/">
>    <xsl:for-each select="//*[count(ancestor-or-self::*) = $depth]">
>      <xsl:copy/>
>    </xsl:for-each>
> </xsl:template>
>
> This doesn't de-duplicate the list however (that's a little fancier).

Any insight into how I might go about de-duplicating the list?
Is a unique() function available in any extensions?

Thank You and Best Regards,

S. Perugini


======================================================================
Wendell Piez                            
mailto:wapiez(_at_)mulberrytech(_dot_)com
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
======================================================================


XSL-List info and archive:  http://www.mulberrytech.com/xsl/xsl-list



<Prev in Thread] Current Thread [Next in Thread>