xsl-list
[Top] [All Lists]

Re: Catch ALL | Failed template rule

2005-03-22 12:49:59
Consider the following:


Transform XML into XML.  The resulting XML will be a series of pass
and fails where specific template rules have a match.  So you might be
asking questions like, does my element have an attribute "a" who's
value is "b"?  Or actually, you'd ask the question:  if my element has
an attribute "a" who's value is "b" then append the attribute "pass" =
"1" to the resulting XML, otherwise, append the attribute "pass" =
"0".

Example XML:
<foo>
  <bar a="c"/>
  <bar a="b"/><!-- passes -->
  <bar a="a"/>
  <bar a="b"/><!-- passes -->
</abc>

You would then:
<xsl:apply-template select="foo/bar[(_at_)a='b']" mode="matchedresults"/>

And match on:
<xsl:template match="bar" mode="matchedresults">
  <!-- append element "pass" = "1"-->
</xsl:template>

At this point, there is no way to have an "unmatched" template result,
and this does make sense to me.  I guess I was looking for the
cleanest way to exercise this.  I guess it would be this:
<xsl:apply-template select="not(foo/bar[(_at_)a='b'])" mode="unmatchedresults"/>


On Tue, 22 Mar 2005 18:12:57 +1100, Dimitre Novatchev
<dnovatchev(_at_)gmail(_dot_)com> wrote:
I know that the OP meant something completely different, but probably
what seems as an appropriate  answer to the question expressed in the
title of this thread is:

  the builtin rules.

It is a good practice to have them explicitly in one's code (with the
least priority possible) and to put breakpoints on them (in a good
XSLT IDE with a debugger), whenever one gets unexpected output that no
other template is supposed to produce.

I find this meaning of "catch all" more natural and intuitive.

Cheers,
Dimitre Novatchev.


On Mon, 21 Mar 2005 08:03:06 -0700, Karl Stubsjoen 
<kstubs(_at_)gmail(_dot_)com> wrote:
I'd like a catch ALL template rule, actually a catch NOT template
rule.  In an effort to check for the existence of a select, I have
setup a match template rule that simply returns "1" for a match.  So I
have:

<xsl:template match="record" mode="recordexists">
<xsl:text>1</xsl:text>
</xsl:template>

The failed select would need to return a "0".  So I need a match that
simply returns 0.

So something like:

<xsl:template match="not(record)" mode="recordexists">
<xsl:text>0</xsl:text>
</xsl:template>

(which is not a legal match statement, but that is what I need).  I'm
sure there is a way, and I'm sure it is obvious!  Just not coming to
me.

Thanks,
Karl

--~------------------------------------------------------------------
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>
--~--