Re: [xsl] CATCH ALL | template rule (2nd try)

Subject: Re: [xsl] CATCH ALL | template rule (2nd try)
From: Dimitre Novatchev <dnovatchev@xxxxxxxxx>
Date: Wed, 18 May 2005 07:17:17 +1000
On 5/18/05, Karl Stubsjoen <kstubs@xxxxxxxxx> wrote:
> Okay, I am going to try that!  How about this simpler example
> though..., would you mind providing the inverse for this one:
>
> <xsl:template match="A">
> <xsl:copy>
>  <match>
>    <xsl:apply-templates select="B[X[@val=$match_v1]][X[@val=$match_v2]]"/>
>  </match>
>  <exception>
>    <!-- currently, copy of the match above, but would like this to be
> expressed as the exception -->
>    <xsl:apply-templates select="B[X[@val=$match_v1]][X[@val=$match_v2]]"/>
>  </exception>
> </xsl:copy>
> </xsl:template>

N.P.

This can be done mechanically:

 >    <xsl:apply-templates select="B[X[@val=$match_v1]][X[@val=$match_v2]]"/>

  <xsl:variable name="x" select="B[X[@val=$match_v1]][X[@val=$match_v2]]"/>

   <xsl:apply-templates select="node()[not(count(.|$x) = count($x))]"/>


Of course, in XPath 2.0 one will use the except operator:

   <xsl:apply-templates select="node() except $x"/>




Cheers,
Dimitre





>
>
> On 5/17/05, Dimitre Novatchev <dnovatchev@xxxxxxxxx> wrote:
> > > <xsl:apply-templates
> > >
select="fx:node-set($interval)//fn:interval[//field[@fieldname='EntityID']=$F
TEInterval_Members][//field[@fieldname='EntityID']=$FTEInterval_JTED_Mains]"
> > > mode="Exceptions" />
> > >
> > > What is the inverse of this?  Which would suffice to be my "CATCH
> > > ALL", in otherwords match everything else where the above combination
> > > fails.
> >
> > fx:node-set($interval)//node()[not(count(. | yourExpression) =
> > count(yourExpression))]
> >
> > generally, if there are two node-sets: $ns1 and $ns2, their set
difference
> >    $ns2 - $ns1
> > is expressed by this XPath expression:
> >
> >    $ns2[not(count(. | $ns1) = count($ns1) ) ]
> >
> > Cheers,
> > Dimitre

Current Thread