Subject: RE: how do you determine if a property exists?
From: "Passin, Tom" <tpassin@xxxxxxxxxxxx>
Date: Thu, 15 Apr 2004 11:49:23 -0400
|
> From: David Buddrige [mailto:dbuddrige@xxxxxxxxx]
> --- Jarno.Elovirta@xxxxxxxxx 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
|