RE: [xsl] Problem with xsl:if

Subject: RE: [xsl] Problem with xsl:if
From: "Andreas L. Delmelle" <a_l.delmelle@xxxxxxxxxx>
Date: Wed, 21 Apr 2004 18:44:19 +0200
> -----Original Message-----
> From: Gerald Fingerlos [mailto:gerald@xxxxxxxxxxxx]
>
>

Hi,

<snip />
> What Id like to to is the get an output document which should contain

>   <add-attr attr-name="jkuPeHabd">
>     <value type="string">7777-33-11</value>
>   </add-attr>

> only, if the jkuSLABS=90 AND jkuSLART=50. Otherwise the 3 lines should
> be omitted.
>

Try this:

<xsl:template match="*[@attr-name='jkuPeHabd']">
  <xsl:choose>
    <xsl:when test="preceding-sibling::add-attr[
                  @attr-name='jkuSLABS'][1]/value='90' and
                preceding-sibling::add-attr[
                  @attr-name='jkuSLART'][1]/value='50'">
      <xsl:copy-of select="." />
    </xsl:when>
    <xsl:otherwise>
      <!-- do something else -->
    </xsl:otherwise>
  </xsl:choose>
</xsl:template>

> I thought of the following, but I think I am misunderstanding
> something:
>
<snip />
>  <xsl:template match="*[@attr-name='jkuPeHabd']">
>    <xsl:variable name="slart"
>         select="//*[@attr-name='jkuPeBeschSAP22SLART']//value"/>
>    <xsl:variable name="slabs"
>         select="//*[@attr-name='jkuPeBeschSAP22SLABS']//value"/>
>
>    <xsl:if test="($slart!='50')   or   ($slabs!='90')">
>    </xsl:if>
>  </xsl:template>
>
> As far as I can see the if never gets true, but still if it would be
> true, I would need some "else" operation. Maybe you can give me a hint
> how to solve this.
>

AFAICT, there is something odd about the variables:

//value

all value nodes, descending (no matter what level) from

//*

any element node, at any level in the source document,

[@attr-name='jkuPeBeschSAP22SLART']

having an attribute attr-name equal to 'jku...'

I don't think that that's what you really want to compare to. In this case,
it could work, but add a few other nodes to your source document, and this
would lead to highly undesirable results.


Hope this helps!

Cheers,

Andreas

Current Thread