How do I check if XML value is nil in XSLT

StingyJack picture StingyJack · Jun 9, 2011 · Viewed 12.8k times · Source

In an XML document I have some address data..

<zip>08001</zip>
<zipPlus xsi:nil="true" />

and

<zip>08002</zip>
<zipPlus>4512</zipPlus>

On only want to bother displaying the zip plus value if there is a value to use. (for the purposes of this example, I don't care if its a correct zip plus format or not)

Trying to use the following snippet in an XSLT never seems to work right, and I think it has to do with how I am checking for the xsl:nil value

<EmployerZipCode>
      <xsl:value-of select="zip"/>
      <xsl:if test="zipPlus != @xsl:nil">
        <xsl:value-of select="'-'"/>
        <xsl:value-of select="zipPlus"/>
      </xsl:if>
      <xsl:value-of select="$sepChar"/> <!--this is a comma -->
</EmployerZipCode>

The results I get are always

08001,
08002,

not

08001,
08002-4512,

What is the proper way to check for nil-led elements in XSLT? Are there any other ways to get around this problem and get the result I want?

Answer

Jim Garrison picture Jim Garrison · Jun 9, 2011
<xsl:if test="not(zipPlus/@xsi:nil='true')">