xsl-list
[Top] [All Lists]

Re: Checking Value or element in XSL

2004-11-18 06:03:15
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(_at_)yahoo(_dot_)com> 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 
 


--~------------------------------------------------------------------
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>
--~--



<Prev in Thread] Current Thread [Next in Thread>