Re: [xsl]Checking Value or element in XSL

Subject: Re: [xsl]Checking Value or element in XSL
From: Mukul Gandhi <mukul_gandhi@xxxxxxxxx>
Date: Thu, 18 Nov 2004 05:03:15 -0800 (PST)
Hi Arul,
  Here is a slightly modified XSL -

<xsl:for-each select="child::*">
  <cs>
    <xsl:attribute name="attribute">
      <xsl:value-of select="name()"/>
    </xsl:attribute>
    <xsl:attribute name="value">
      <xsl:choose>
        <xsl:when test="normalize-space(text()) = ''">
	  <xsl:for-each select="child::*">
	    <xsl:value-of select="text()"/>
            <xsl:if test="position() != last()">
              <xsl:text> </xsl:text>
            </xsl:if>  
	  </xsl:for-each>
	</xsl:when>
        <xsl:otherwise>
	  <xsl:value-of select="text()"/>
	</xsl:otherwise>
      </xsl:choose>
    </xsl:attribute>
  </cs>
</xsl:for-each>

Please notice the use of normalize-space() function
(which makes all the difference).

This node (1)
<Name>
  <FirstName>Arul</FirstName>
  <LastName>Raj</LastName>
</Name>

is different from (2)
<Name><FirstName>Arul</FirstName><LastName>Raj</LastName></Name>

in case (1), a text node after <Name> is not empty;
because it has white characters(newline & blank
spaces).

Regards,
Mukul

--- Arulraj <p_arulraj@xxxxxxxxx> wrote:

> Hello,
> 
> I have the following xml elements;
> <Person>
>   <Num>1</Num>
>    <Name>
>         <FirstName>Arul</VorName>
> 	<LastName>Raj</NachName>
>    </Name>
> </Person>
> 
> I need the following output 
> 
> <cs attribute="Num" value= "1"/>
> <cs attribute="Name" value ="Arul Raj"/>
> 
> I have used following XSLT.
> 
> <xsl:for-each select="child::*">
> <cs>
> <xsl:attribute name="attribute">
> 							  <xsl:value-of select="name()"/>
> 							</xsl:attribute>
> 							<xsl:attribute name="value">
> 							<xsl:choose>
> 							<xsl:when test="(text()='')">
> 							<xsl:for-each select="child::*">
> 							<xsl:value-of select="text()"/><xsl:text>
> </xsl:text>
> 							</xsl:for-each>
> 							</xsl:when>
> 							<xsl:otherwise>
> 							<xsl:value-of select="text()"/>
> 							</xsl:otherwise>
> 							</xsl:choose>
> 							</xsl:attribute>
> 							</cs>
> 
> </xsl:for-each>
> 
> I am getting following output:
> <cs attribute="Num" value="1"/>
> 							<cs attribute="Name" value="
 "/>
> 
> How to solve this ?
> 
> thanks
> regards,
> Arul



		
__________________________________ 
Do you Yahoo!? 
Meet the all-new My Yahoo! - Try it today! 
http://my.yahoo.com 

Current Thread