xsl-list
[Top] [All Lists]

Re: [xsl] Fundimentle Predicate Problem or Bug??

2008-09-17 10:01:51
Chris Hughes wrote:
Hi

I tried asking for help a while back on this, anyway now I have worked out 
exactly where my issue is and will provide examples below.

Assume this data....

<?xml version="1.0" encoding="utf-8"?>
<ORCB082>
   <ROWSET>
      <ROW num="1">
        <Fixture>
            <FixtureDate>2008-10-17</FixtureDate>
            <FixtureDayText>DAY ONE TEST</FixtureDayText>
            <Race>
               <RaceType>S</RaceType>
            </Race>
            <Race>
               <RaceType>H</RaceType>
            </Race>
         </Fixture>
      </ROW>
   </ROWSET>
</ORCB082>


Stylesheet 1
------------

This stylesheet outputs "DAY ONE TEST" message, IMO it should match no 
records and not output anything.

<?xml version="1.0"?> 
  <xsl:stylesheet version="2.0" 
xmlns:xsl="http://www.w3.org/1999/XSL/Transform";
                                xmlns:xs="http://www.w3.org/2001/XMLSchema";>
  <xsl:output method="text" indent="yes"/> 

  <xsl:template match="/">

  <xsl:for-each select="/ORCB082/ROWSET/ROW/Fixture[FixtureDate &gt;= 
'2008-01-01' and FixtureDate &lt;= '2010-01-01' and
                                                    Race/RaceType &gt;= 'R' 
and Race/RaceType &lt;= 'R']" >

    <xsl:message><xsl:value-of select="FixtureDayText"/></xsl:message>
  </xsl:for-each>
  </xsl:template>
</xsl:stylesheet>


Stylesheet 2
------------

This stylesheet outputs nothing - which is what I would expect, but 
essentially is stylesheet 1 not performing the same logic as 2?


<?xml version="1.0"?> 
  <xsl:stylesheet version="2.0" 
xmlns:xsl="http://www.w3.org/1999/XSL/Transform";
                                xmlns:xs="http://www.w3.org/2001/XMLSchema";>
  <xsl:output method="text" indent="yes"/> 

  <xsl:template match="/">

  <xsl:for-each select="/ORCB082/ROWSET/ROW/Fixture[FixtureDate &gt;= 
'2008-01-01' and FixtureDate &lt;= '2010-01-01' and
                                                    Race/RaceType = 'R']" >

    <xsl:message><xsl:value-of select="FixtureDayText"/></xsl:message>
  </xsl:for-each>
  </xsl:template>
</xsl:stylesheet>

Conclusion
-----------

Like so many of us working in the XML / XSLT world I find it difficult to 
adjust to a different way of working.  Essentially had I wrote this logic in 
SQL or 4GL or VB etc etc I'd be sure that it would work.  I hope nobody is 
offended by me suggesting this may be a bug!

Thanks in advance.

Chris


In your first solution, Race/Racetype is a set of two values, 'S', and
'H'. The tricky bit is in how your tests apply to sets.

When the right hand side is a set, the tests "'R' <= ...." and "'R' >=
...." both return true if 'R' is <= _any_ element of the set or >= _any_
element of the set.
The first test matches 'S' and the second test matches 'H'

        # r

-- 
Ronan Klyne
Business Collaborator Developer
Tel: +44 01189 028518
ronan(_dot_)klyne(_at_)groupbc(_dot_)com
www.groupbc.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>
--~--