xsl-list
[Top] [All Lists]

Re: Exclude by Sibling Condition

2005-12-01 21:05:20
On Thu, 1 Dec 2005 20:07:27 -0600
"Jay Bryant" <jay(_at_)bryantcs(_dot_)com> wrote:

Hi, Mike,

That's a question to which you can find an answer in Dave Pawson's FAQ at
http://www.dpawson.co.uk/xsl/sect2/N2696.html

In your case, something like the following will do the trick:

<xsl:template match="page[not(@tab=following::page/@tab)]">
  <!-- Process the page nodes with unique values for the tab attribute
here -->
</xsl:template>

What I ended up doing is the following:

<xsl:for-each select="page">
    <xsl:variable name="prev" select="preceding-sibling::page[position()=1]"/>
    <xsl:if test="not($prev) or @tab!=$prev/@tab">

I'm not sure how this differs from your method but I found that a)
[position()=1] must be used to isolate only the immediate sibling and b)
the @tab!=$prev/@tab strangely returns false if $prev is nil.

Mike

You can do the same trick in the select attributes of apply-templates or
for-each instructions, too, depending on exactly what you need to do.

Jay Bryant
Bryant Communication Services


----- Original Message ----- 
From: "Michael B Allen" <mba2000(_at_)ioplex(_dot_)com>
To: <xsl-list(_at_)lists(_dot_)mulberrytech(_dot_)com>
Sent: Thursday, December 01, 2005 3:53 PM
Subject: [xsl] Exclude by Sibling Condition


Considering the following XML fragment:

  <page name="p0" tab="products"/>
  <page name="p1" tab="products"/>
  <page name="p2" tab="products"/>
  <page name="d" tab="downloads"/>
  <page name="s" tab="support"/>

How can I select a subset that excludes elements with a tab attribute
value matching that of a previous sibling?

Meaning I want a list with no redundant @tab values like:

  <page name="p0" tab="products"/>
  <page name="d" tab="downloads"/>
  <page name="s" tab="support"/>

Thanks,
Mike

--~------------------------------------------------------------------
XSL-List info and archive:  http://www.mulberrytech.com/xsl/xsl-list
To unsubscribe, go to: http://lists.mulberrytech.com/xsl-list/
or e-mail: 
<mailto:xsl-list-unsubscribe(_at_)lists(_dot_)mulberrytech(_dot_)com>
--~--





--~------------------------------------------------------------------
XSL-List info and archive:  http://www.mulberrytech.com/xsl/xsl-list
To unsubscribe, go to: http://lists.mulberrytech.com/xsl-list/
or e-mail: 
<mailto:xsl-list-unsubscribe(_at_)lists(_dot_)mulberrytech(_dot_)com>
--~--


--~------------------------------------------------------------------
XSL-List info and archive:  http://www.mulberrytech.com/xsl/xsl-list
To unsubscribe, go to: http://lists.mulberrytech.com/xsl-list/
or e-mail: <mailto:xsl-list-unsubscribe(_at_)lists(_dot_)mulberrytech(_dot_)com>
--~--



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