p2p.wrox.com Forums

p2p.wrox.com Forums (http://p2p.wrox.com/index.php)
-   XSLT (http://p2p.wrox.com/forumdisplay.php?f=86)
-   -   If Then Statements in XSL (http://p2p.wrox.com/showthread.php?t=43562)

deltree June 6th, 2006 08:52 AM

If Then Statements in XSL
 
I have a question about if then statements in XSLT. I would like to display a line of code only if a specific data item is not null. It seems to be a bit of a daunting task for me, an XML/XSL n00b, but I'm hoping that some of the experts here will know just the trick.

Explanation below:

I curently have links setup like the following:

<a href="/express/index.cgi?add_by_express={$prod},{$unit},1">Read More</a><br/>

Where unit is defined as:

<xsl:variable name="unit">
<xsl:value-of select="Selling_UM_1"/>
</xsl:variable>

However, there are multiple instances where the value of Selling_UM_1 is empty in the XML. In these instances, I would like the link to not show, The link should only show up when Selling_UM_1 is populated. So I'm thinking something like:

If Selling_UM_1 != null {
Display <a href="/express/index.cgi?add_by_express={$prod},{$unit},1"> Read More</a><br/>
}

Else {
Display &nbsp;
}


I just don't know how to turn that into XSL.

Could anyone offer some suggestions?

Thanks


mhkay June 6th, 2006 09:03 AM

Firstly, don't do this:

<xsl:variable name="unit">
<xsl:value-of select="Selling_UM_1"/>
</xsl:variable>

when you could do this:

<xsl:variable name="unit" select="Selling_UM_1"/>

In the first case you are constructing a tree, which involves copying data and allocating memory. In the second case you are merely creating a reference to existing nodes without copying anything.

Secondly, what do you mean by "empty"? There's a difference between the element being absent, and the element being present but without any content. It might even be present with irrelevant content, e.g <Selling_UM_1> </Selling_UM_1>. For convenience, I'll assume that you test for emptyness by testing whether normalize-space(Selling_UM_1) is a zero-length string.

Your logic is then:

<xsl:choose>
  <xsl:when test="normalize-space($unit)">
    <a href="whatever"/>
  </xsl:when>
  <xsl:otherwise>#xa0;</xsl:otherwise>
</xsl:choose>




Michael Kay
http://www.saxonica.com/
Author, XSLT Programmer's Reference and XPath 2.0 Programmer's Reference

deltree June 6th, 2006 03:02 PM

Quote:

quote:Originally posted by mhkay
 Firstly, don't do this:

<xsl:variable name="unit">
<xsl:value-of select="Selling_UM_1"/>
</xsl:variable>

when you could do this:

<xsl:variable name="unit" select="Selling_UM_1"/>

In the first case you are constructing a tree, which involves copying data and allocating memory. In the second case you are merely creating a reference to existing nodes without copying anything.

Secondly, what do you mean by "empty"? There's a difference between the element being absent, and the element being present but without any content. It might even be present with irrelevant content, e.g <Selling_UM_1> </Selling_UM_1>. For convenience, I'll assume that you test for emptyness by testing whether normalize-space(Selling_UM_1) is a zero-length string.

Your logic is then:

<xsl:choose>
  <xsl:when test="normalize-space($unit)">
    <a href="whatever"/>
  </xsl:when>
  <xsl:otherwise>#xa0;</xsl:otherwise>
</xsl:choose>




Michael Kay
http://www.saxonica.com/
Author, XSLT Programmer's Reference and XPath 2.0 Programmer's Reference
Worked great! Thanks!



All times are GMT -4. The time now is 04:03 AM.

Powered by vBulletin®
Copyright ©2000 - 2019, Jelsoft Enterprises Ltd.
© 2013 John Wiley & Sons, Inc.