[xsl] Implementing a (fairly) complex business rule

Subject: [xsl] Implementing a (fairly) complex business rule
From: "Bradley, Peter" <pbradley@xxxxxxxxxx>
Date: Tue, 30 Sep 2008 14:07:27 +0100
I have a business rule that says that if the value of the REDUCEDI
element is "00" and if the value of the DOMICILE element is in a list of
values comprising XG, XH, XI, XK, XL, GG, JE and IM then a POSTCODE
element must be present.  It should not be present otherwise.

If the POSTCODE element is present and has a NULL value, then a
ReasonForNull attribute should be included, with a value of "1".

If the POSTCODE element is present and has a value, that value should be
output and the ReasonForNull attribute should not be present.

I have expressed this as follows:

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

However, in my output I am getting POSTCODE elements that both have a
value and also have a ReasonForNull attribute with a value of "1".

Can anyone put me out of my misery?  I just cannot see how this can
happen.

Thanks


Peter

Current Thread