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