Re: CATCH ALL | template rule (2nd try)
2005-05-17 17:23:45
Never mind, I got it : )
On 5/17/05, Karl Stubsjoen <kstubs(_at_)gmail(_dot_)com> 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(_at_)gmail(_dot_)com> 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(_at_)gmail(_dot_)com> wrote:
becomes:
fx:node-set($interval)[not(count(. | yourExpression) =
count(yourExpression))]
(lose the "whack whack")
On 5/17/05, Karl Stubsjoen <kstubs(_at_)gmail(_dot_)com> 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(_at_)gmail(_dot_)com> 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(_at_)gmail(_dot_)com> wrote:
On 5/18/05, Karl Stubsjoen <kstubs(_at_)gmail(_dot_)com> 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[(_at_)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[(_at_)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[(_at_)val=$match_v1]][X[@val=$match_v2]]"/>
<xsl:variable name="x"
select="B[X[(_at_)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(_at_)gmail(_dot_)com>
wrote:
<xsl:apply-templates
select="fx:node-set($interval)//fn:interval[//field[(_at_)fieldname='EntityID']=$FTEInterval_Members][//field[(_at_)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
--~------------------------------------------------------------------
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>
--~--
--~------------------------------------------------------------------
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>
--~--
|
|