Re: [xsl] Correct way to test for no match

Subject: Re: [xsl] Correct way to test for no match
From: Wendell Piez <wapiez@xxxxxxxxxxxxxxxx>
Date: Thu, 01 Oct 2009 17:43:43 -0400
Dan,

At 04:04 PM 10/1/2009, you wrote:
I have a structure where I need to match values between w element attributes. These elements are in different parst of the document. Problem I'm trying to solve is when there is a typo in one of the attributes and there is no match. I thought this would do it, but it's not
<xsl:when test="ancestor::ipb/figure/subfig/graphic[@boardno=$sht_num]/@boardno">


same with this

<xsl:when test="ancestor::ipb/figure/subfig/graphic[@boardno=$sht_num]/@boardno = ''">

Any suggestions?

I think you probably want "ancestor::ipb/figure/subfig/graphic/@boardno=$sht_num" as a positive test -- this will be true if there is a match (there exists a graphic/@boardno in that place whose value is $sht_num).


This is a somewhat more direct version of your first effort, which is true when there are ancestor::ipb/figure/subfig/graphic elements whose @boardno = $sht_num, by virtue of the fact that they (necessarily) have a @boardno. But I'm not sure you want a positive test: your description suggests you want to know when there isn't.

Your second attempt can be true only if $sht_num is "", and never otherwise. (It will also fail if no graphic elements are found on that path.)

If you want a negative test, which will come back true if there is no graphic whose @board_no is $sht_num, the way to do that is

test="not(ancestor::ipb/figure/subfig/graphic/@boardno=$sht_num)"

Or, of course, you can use the xsl:otherwise clause.

Good luck,
Wendell

Here is the doc structure:

<ipb>
  <figure>
    <subfig>
      <graphic boardno='a'/>
    </subfig>
  </figure>
  <table>
    <row>
      <entry><ipbilus><xref shtref='b'/></ipbilus>
      </entry>
    </row>
  </table>
</ipb>

$sht_num is set to xref/@shtref so b never finds a on graphic


======================================================================
Wendell Piez                            mailto:wapiez@xxxxxxxxxxxxxxxx
Mulberry Technologies, Inc.                http://www.mulberrytech.com
17 West Jefferson Street                    Direct Phone: 301/315-9635
Suite 207                                          Phone: 301/315-9631
Rockville, MD  20850                                 Fax: 301/315-8285
----------------------------------------------------------------------
  Mulberry Technologies: A Consultancy Specializing in SGML and XML
======================================================================

Current Thread