xsl-list
[Top] [All Lists]

RE: how do you determine if a property exists?

2004-04-15 08:49:23
From: David Buddrige [mailto:dbuddrige(_at_)yahoo(_dot_)com] 

--- Jarno(_dot_)Elovirta(_at_)nokia(_dot_)com wrote:
if you want to test if the attribute
exists, then simply

  <xsl:when test="@Predecessors">


For some reason, this doesn't seem to work for me.  I
am using saxon as my xslt processor.

I have the following data:

<?xml version="1.0" encoding="iso-8859-1"?>
<info>
      <mytag duration="3 days" />
      <mytag />
      <mytag duration="6 hours" />
      <mytag duration="33 hours" />
      <mytag duration="" />
      <mytag duration="13 hours" />
      <mytag duration="5 days" />
      <mytag duration="" />
      <mytag duration="3 hours" />
      <mytag duration="23 hours" />
</info>



Here is one way to do it.  There can be a million variations on the
theme -

<xsl:template match="/info">
<results>
  <xsl:for-each select='mytag'>
    <xsl:element name='myelement'>
      <xsl:choose>
        <xsl:when test='@duration != ""'>
          <xsl:copy-of select='@duration'/>
        </xsl:when>
        <xsl:otherwise>
          <xsl:attribute name='duration'>1</xsl:attribute>
        </xsl:otherwise>
      </xsl:choose>
    </xsl:element>
  </xsl:for-each>
</results>
</xsl:template>

Notice the sense of test.  This form picks up both a missing attribute
and an empty string value.

Cheers,

Tom P