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

RE: Implementing a (fairly) complex business rule

Subject: RE: Implementing a (fairly) complex business rule
From: "Bradley, Peter" <pbradley@xxxxxxxxxx>
Date: Tue, 30 Sep 2008 15:08:11 +0100
RE:  Implementing a (fairly) complex business rule
Ah!  Misplaced parenthesis.  I have it right everywhere else.

However I need to address the other problems you raise ...

First, there's the context.  Here is a fragment that should give you
enough (if not please say):

...
<xsl:for-each select="s0:EntryProfile">
  <EntryProfile>
    <DOMICILE>
      <xsl:attribute name="codeListAgencyName">
        <xsl:text>HESA</xsl:text>
      </xsl:attribute>
      <xsl:attribute name="codeListName">
        <xsl:text>DOMICILE</xsl:text>
      </xsl:attribute>
      <xsl:attribute name="languageID">
        <xsl:text>en</xsl:text>
      </xsl:attribute>
      <xsl:value-of select="s0:DOMICILE/text()"/>
    </DOMICILE>
    <!-- NULL is valid for a postcode -->
    <xsl:if
test="/s0:HesaSqlExplicit_Response/s0:Institution/s0:Student/s0:Instance
/s0:REDUCEDI = '00'">
      <xsl:if
        test="s0:DOMICILE='XF' or s0:DOMICILE='XG' or s0:DOMICILE='XH'
or s0:DOMICILE='XI' or s0:DOMICILE='XK' or s0:DOMICILE='XL' or
s0:DOMICILE='GG' or s0:DOMICILE='JE' or s0:DOMICILE='IM'">
        <POSTCODE>
          <xsl:if test="string-length(s0:POSTCODE/text()) = 0">
            <xsl:attribute name="ReasonForNull">
              <xsl:text>1</xsl:text>
            </xsl:attribute>
          </xsl:if>
          <xsl:if test="string-length(s0:POSTCODE/text()) > 0">
            <xsl:value-of select="s0:POSTCODE/text()"/>
          </xsl:if>
        </POSTCODE>
      </xsl:if>
    </xsl:if>
...

The input file is highly data-oriented (it comes from a set of database
tables).

Am I right in thinking, from what you say, that I need to test for
non-empty node by doing:

<xsl:if test="s0:POSTCODE/text()">
  <xsl:value-of select="s0:POSTCODE/text()"/>
</xsl:if>

Presumably the test for an empty node in the other xsl:if statement
should be:

<xsl:if test="not(s0:POSTCODE/text())"> ...

I'm guessing the logical not from the fact that 'and' and 'or' are used.
I can check that for myself if you're getting exasperated with my
ignorance :(

I do apologise for my obvious lack of sophistication in matters xslt.
I've rather had this dumped on me, having not looked at xslt for over
three years and even then at a very basic level.  I am enjoying it,
though.

Many thanks


Peter


-----Original Message-----
From: David Carlisle [mailto:davidc@xxxxxxxxx]
Sent: 30 September 2008 14:35
To: xsl-list@xxxxxxxxxxxxxxxxxxxxxx
Subject: Re:  Implementing a (fairly) complex business rule



> I just cannot see how this can happen.

test="string-length(s0:POSTCODE/text() = 0)"

is always true as it is taking the value returned by  string-length as a
boolean, which is true if it is non zero

the string being passed to string-length is either "true" or "false"
depending on whether
s0:POSTCODE/text() = 0
is true or not, which is true just if one of the text node children of
s0:POSTCODE is "0".

but neither "true" nor "false" have zero length, so the test is always
true.

David


________________________________________________________________________
The Numerical Algorithms Group Ltd is a company registered in England
and Wales with company number 1249803. The registered office is:
Wilkinson House, Jordan Hill Road, Oxford OX2 8DR, United Kingdom.

This e-mail has been scanned for all viruses by Star. The service is
powered by MessageLabs.
________________________________________________________________________

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.