tags:

views:

44

answers:

2
<ROWS>
     <ROW oid="28439">
        <EFL eid="8" fid="27672" count="2" Name = "A : bbb">
            <MK id="3" val="0"/>
            <MK id="11" val="0578678"/>
        </EFL>
   </ROW>
</ROWS>

I have the above xml, i want to have the following loop in XSL

if Name attribute in EFL tag Exists And Not Empty Then
      Display the value of Name attribute
Else
      do something (that i know how to write)
Endif

Please note that this IF Condition will be written within for-each loop on Row tag. So, that 's why we can not use Match.

Thanks

A: 

Refer the following XSL. It works but havent tested corner cases.

<xsl:stylesheet version = '1.0'
 xmlns:xsl='http://www.w3.org/1999/XSL/Transform'&gt;

 <xsl:template match="/ROWS">
     <xsl:for-each select="ROW">
         <xsl:choose>
             <xsl:when test='string-length(EFL/@Name)>0'>
                 <xsl:value-of select="EFL/@Name"/> 
             </xsl:when>

             <xsl:otherwise>I know  what to do here....</xsl:otherwise>
         </xsl:choose>
     </xsl:for-each>
 </xsl:template>

Tushar Tarkas
+1  A: 

Alejandro's quite right; to extrapolate Tushar's example:

<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"&gt;
  <xsl:output method="text" indent="yes"/>

  <xsl:template match="/ROWS">
    <xsl:apply-templates select="ROW" />
  </xsl:template>

  <xsl:template match="ROW[string-length(EFL/@Name)>0]">
    <xsl:value-of select="EFL/@Name" />
  </xsl:template>

  <xsl:template match="ROW">
    <xsl:text>Something else..</xsl:text>
  </xsl:template>
</xsl:stylesheet>

Depending on the nature of your problem as a whole, this might be a better option; either is perfectly valid though. Strictly speaking in this example, even the template matching /ROWS is unnecessary, but it probably will be for anything more complex.

Flynn1179