Have a look at how xsl:value-of works.  Your select attributes evaluate to
node-sets.  The xsl:value-of element then converts those node-sets to
strings as if by call to the string function.  The string function converts
a node-set to a string by returning the string-value of the node in the
node-set that is first in document order.

For your first xsl:value-of, the select evaluates to a node-set containing a
single Element node, <alpha>.  The string-value of this node is the
concatenation of all the string values of all text node descendants of
<alpha> which is what you see.

For your second xsl:value-of, the select evaluates to a node set containing
two Element nodes, <beta>.  The string-value of this node-set is the
concatenation of all the string values of all the text node descendants of
the -first- <beta> element, which is what you see.

Perhaps you want xsl:copy-of?

HTH,
Gary

> -----Original Message-----
> From: Steve Sullivan [mailto:[EMAIL PROTECTED] 
> Sent: Thursday, February 27, 2003 2:40 PM
> To: [EMAIL PROTECTED]
> Subject: value-of misses children
> 
> 
> Hi,
> 
> I'm trying to select all the text of a set of nodes, but
> it fails.  What am I doing wrong here?
> When I use:   <xsl:value-of select="alpha/beta"/>
> it only includes the FIRST beta under alpha,
> not all betas under alpha.
> 
> ========= begin testc.xml ===========
> <?xml version="1.0" encoding="UTF-8"?>
> <alpha>
>   <beta>bb1</beta>
>   <beta>bb2</beta>
>   <gamma>gg2</gamma>
> </alpha>
> 
> ========= begin testc.xsl ===========
> <?xml version="1.0" encoding="UTF-8"?>
> <xsl:stylesheet
>       xmlns:xsl="http://www.w3.org/1999/XSL/Transform";
>       version="1.0"
> >
> <xsl:output method="xml"
>       encoding="UTF-8"
>       indent="yes"
> />
> 
> 
> <xsl:template match="/">
>       <allAlpha>
>       <xsl:value-of select="alpha"/>
>       </allAlpha>
> 
>       <allBetas>
>       <xsl:value-of select="alpha/beta"/>
>       </allBetas>
> </xsl:template>
> 
> </xsl:stylesheet>
> 
> ======== Run xalan: =============
> 
> java org.apache.xalan.xslt.Process -in testc.xml -xsl 
> testc.xsl -out outc.xml
> 
> 
> ========= begin outc.xml ===========
> <?xml version="1.0" encoding="UTF-8"?>
> <allAlpha>
>   bb1
>   bb2
>   gg2
> </allAlpha>
> <allBetas>bb1</allBetas>
> 
> ===============================
> 
> Question: why doesn't the <allBetas> element include bb2?
> How can I get <allBetas> to include ALL the betas?
> I'm running xalan-j_2_4_1 with Sun JDK 1.4.
> 
> Many thanks!
> 
> Steve
> 
> 
> ========================================
> Steve Sullivan    [EMAIL PROTECTED]
> 
>    Mathcom Solutions Inc.: Custom Software Development.
>     * Mathematical optimization, simulation, and modeling.
>     * Data mining, information retrieval.
>     * Java, XML, C++, Mathematica, Matlab, XSLT, XQuery, 
> SOAP, RMI, ...
> 
http://www.mathcom.com    303-494-7115
========================================

Reply via email to