Re: CATCH ALL

[XSL-LIST Mailing List Archive Home] [By Thread] [By Date] [Recent Entries] [Reply To This Message]

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

Subject: Re: CATCH ALL | template rule (2nd try)
From: Karl Stubsjoen <kstubs@xxxxxxxxx>
Date: Tue, 17 May 2005 17:23:45 -0700
Re:  CATCH ALL | template rule (2nd try)
Never mind, I got it : )

On 5/17/05, Karl Stubsjoen <kstubs@xxxxxxxxx> wrote:
> Sorry, I didn't get it : (
> I am close... but picking exceptions that arent' exceptions. I changed
> the apply-templates from above to this (in a desperate attempt to make
> it work):
>
>  <xsl:apply-templates select="fx:node-set($interval)
>     [not(count(.|$scenario_a) = count($scenario_a))]
>     [not(count(.|$scenario_b) = count($scenario_b))]
>     [not(count(.|$scenario_c) = count($scenario_c))]
>     [not(count(.|$scenario_d) = count($scenario_d))]
>     [not(count(.|$scenario_e) = count($scenario_e))]"
>  mode="Exceptions"/>
>
> and then set up the following matches:
>
> <xsl:template match="fn:interval" mode="Exceptions">
> <xsl:variable name="current_interval"
> select="ancestor::fn:interval/@current_interval"/>
> <xsl:comment>EXCEPTION</xsl:comment>
>  <xsl:copy-of select="."/>
> </xsl:template>
>
> next 2 templates hide the "junk":
>
> <xsl:template match="fn:record" mode="Exceptions"/>
> <xsl:template match="node()" mode="Exceptions"/>
>
> Please help, I am not sure where to go from here.  My scenario_a data
> appears in both the applied rule (above exceptions) and in exceptions.
> Also, I have setup an ABC example which does work properly (much
> simple than my real data) but am confused as to why the real data is
> not working.
>
> Thanks,
>
> Karl..
>
>
> On 5/17/05, Karl Stubsjoen <kstubs@xxxxxxxxx> wrote:
> > I got it:
> > (without the node() match below i was getting the extra junk.. now it
> > is suppressed)
> > Thanks DIMITRE!  This is a kick ass solution!
> >
> > <xsl:apply-templates select="fx:node-set($interval)//node()
> >    [not(count(.|$scenario_a) = count($scenario_a))]
> >    [not(count(.|$scenario_b) = count($scenario_b))]
> >    [not(count(.|$scenario_c) = count($scenario_c))]
> >    [not(count(.|$scenario_d) = count($scenario_d))]
> >    [not(count(.|$scenario_e) = count($scenario_e))]"
> >  mode="Exceptions"/>
> >
> > <xsl:template match="fn:record" mode="Exceptions">
> >  <xsl:comment>EXCEPTION</xsl:comment>
> >  <xsl:copy-of select="."/>
> > </xsl:template>
> >
> > <xsl:template match="node()" mode="Exceptions"/>
> >
> >
> > On 5/17/05, Karl Stubsjoen <kstubs@xxxxxxxxx> wrote:
> > > becomes:
> > > fx:node-set($interval)[not(count(. | yourExpression) =
> > > count(yourExpression))]
> > >
> > > (lose the "whack whack")
> > >
> > > On 5/17/05, Karl Stubsjoen <kstubs@xxxxxxxxx> wrote:
> > > > I figured out the extra junk problem, we were at the wrong context of
> > > > $interval on the apply exclusions.  This context is at:  fn:interval,
> > > > so I removed the node() from the apply-templates so this:
> > > > fx:node-set($interval)//node()[not(count(. | yourExpression) =
> > > > count(yourExpression))]
> > > >
> > > > becomes:
> > > > fx:node-set($interval)//[not(count(. | yourExpression) =
> > > > count(yourExpression))]
> > > >
> > > > Junk is gone.  Does this seem correct, or is "node()" a very
important
> > > > aspect to this xpath?
> > > >
> > > >
> > > > On 5/17/05, Karl Stubsjoen <kstubs@xxxxxxxxx> wrote:
> > > > > Ahh Dimitre, quit teasing me with that XSLT 2.0 stuff!
> > > > >
> > > > > It is working great!  Except... I am getting additional junk.  Not
> > > > > sure where it is coming from.  Like an apply-templates with no
match
> > > > > and you just get the text of the elements back.  I have set up
empty
> > > > > match templates for my mode of "Exceptions", it helped some, but
I'm
> > > > > still getting back extra junk.  In my "simple example" I am not
> > > > > getting back the extra junk.  Any ideas?
> > > > >
> > > > >
> > > > > On 5/17/05, Dimitre Novatchev <dnovatchev@xxxxxxxxx> wrote:
> > > > > > 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

PURCHASE STYLUS STUDIO ONLINE TODAY!

Purchasing Stylus Studio from our online shop is Easy, Secure and Value Priced!

Buy Stylus Studio Now

Download The World's Best XML IDE!

Accelerate XML development with our award-winning XML IDE - Download a free trial today!

Don't miss another message! Subscribe to this list today.
Email
First Name
Last Name
Company
Subscribe in XML format
RSS 2.0
Atom 0.3
Site Map | Privacy Policy | Terms of Use | Trademarks
Free Stylus Studio XML Training:
W3C Member
Stylus Studio® and DataDirect XQuery ™are products from DataDirect Technologies, is a registered trademark of Progress Software Corporation, in the U.S. and other countries. © 2004-2013 All Rights Reserved.