xsl-list
[Top] [All Lists]

Re: [xsl] Determining if an optional attribute is present

2006-10-17 09:58:25
On 10/17/06, Richard Lewis <richardlewis(_at_)fastmail(_dot_)co(_dot_)uk> wrote:
On Tuesday 17 October 2006 17:36, Sam Carleton wrote:
>
> <xsl:attribute name="revision">
>   <xsl:if test="not(string(@revision)) = false()">
>     <xsl:value-of select="@revision"/>
>   </xsl:if>
>   <xsl:if test="not(string(@revision))">
>     <xsl:text>0</xsl:text>
>   </xsl:if>
> </xsl:attribute>
>
What about:

<xsl:attribute name="revision">
  <xsl:if test="@revision != ''">
    <xsl:value-of select="@revision"/>
  </xsl:if>
  <xsl:if test="not(@revision)">
    <xsl:text>0</xsl:text>
  </xsl:if>
</xsl:attribute>

Richard,

I tried it, it did not work either.

On 10/17/06, David Carlisle <davidc(_at_)nag(_dot_)co(_dot_)uk> wrote:

you are making it too hard:-)

test="@revision" is the test you arre looking for, but you don't need
the test at all.

replace

<node>
<xsl:attribute name="revision">
  <xsl:if test="not(string(@revision)) = false()">
    <xsl:value-of select="@revision"/>
  </xsl:if>
  <xsl:if test="not(string(@revision))">
    <xsl:text>0</xsl:text>
  </xsl:if>
</xsl:attribute>
</node>

by

<node revision="0">
 <xsl:copy-of select="@revision"/>
</node>

Ok, I don't fully understand how the replacement code works,
considering there is no test in it.  Here is the actual complete
template, using Richard's code.  There is a comment about

<xsl:template match="Method|Cal|Blank">
 <xsl:element name="{name()}">
   <xsl:attribute name="objectID"><xsl:value-of
select="@objectID"/></xsl:attribute>
   <xsl:attribute name="version"><xsl:value-of
select="@version"/></xsl:attribute>
   <xsl:attribute name="revision">
     <xsl:if test="@revision != ''">
       <xsl:value-of select="@revision"/>
     </xsl:if>
     <xsl:if test="not(@revision)">
       <xsl:text>0</xsl:text>
     </xsl:if>
   </xsl:attribute>
<!-- the line below isn't the best either.  I simply need to copy over
all the children nodes, is there a better way? -->
   <xsl:apply-templates mode="copyNode"/>
 </xsl:element>
</xsl:template>

<xsl:template match="*" mode="copyNode">
   <xsl:copy-of select="."/>
</xsl:template>

Sam
--
Miltonstreet Photography
http://www.miltonstreet.com

--~------------------------------------------------------------------
XSL-List info and archive:  http://www.mulberrytech.com/xsl/xsl-list
To unsubscribe, go to: http://lists.mulberrytech.com/xsl-list/
or e-mail: <mailto:xsl-list-unsubscribe(_at_)lists(_dot_)mulberrytech(_dot_)com>
--~--