| Subject: Re: [xsl] Creating intermediate XML fragment From: Peter Davis <pdavis152@xxxxxxxxx> Date: Wed, 18 Sep 2002 14:02:21 -0700 | 
On Wednesday 18 September 2002 08:51, alexandre bord wrote:
> i'm sorry not to have explained it .
> The rules are
> (0) @name = name1 = @ name2
> (1) print foobar/@name if it is not ( in bar/@name1 or in bar/@name2 or
> in foo/@name)
> (2) print bar/@name1 if it is not in foo/@name
> (2') print bar/@name2 if it is not in foo/@name
> (3) Don't print foo/@name
>
> It's your second guess (i think)
> Thanks once more for your help
Okay, the answer is fairly simple then.  Like I said, it's a grouping problem.  
One of the ways to solve it is to use the Muenchian method to test that a 
value has not already been output (search through other threads on this list 
for more info about that method).
<!-- Make a key so that you can look up any of the name values -->
<xsl:key name="name" match="foobar/@name | bar/@name1 | bar/@name2" use="."/>
<!-- Make a key to lookup the foo/@name values -->
<xsl:key name="not-name" match="foo/@name" use="."/>
<!-- For each element, apply-templates on its attributes and its children, but 
don't output anything here -->
<xsl:template match="*">
  <xsl:apply-templates select="@*"/>
  <xsl:apply-templates/>
</xsl:template>
<xsl:template match="foobar/@name | bar/@name1 | bar/@name2">
  <!-- if the name attribute is the first with the given value -->
  <xsl:if test="count(. | key('name', .)[1]) = 1">
    <!-- and if there are no foo/@name's with the value -->
    <xsl:if test="not(key('not-name', .))">
      <xsl:value-of select="."/>
      <xsl:text>
</xsl:text>
    </xsl:if>
  </xsl:if>
</xsl:template>
<!-- for all other attributes, do nothing -->
<xsl:template match="@*"/>
-- 
Peter Davis
 XSL-List info and archive:  http://www.mulberrytech.com/xsl/xsl-list
| Current Thread | 
|---|
| 
 | 
| <- Previous | Index | Next -> | 
|---|---|---|
| Re: [xsl] Creating intermediate XML, alexandre bord | Thread | Refinement: [xsl] creating namespac, Fries, Markus, fiscu | 
| Re: Re: [xsl] a nicer total sibling, scruss | Date | [xsl] Can you apply a template matc, Mike Carlisle | 
| Month |