[XSL-LIST Mailing List Archive Home] [By Thread] [By Date]

RE: [xsl] how to get string value of element node without children concatenated


Subject: RE: [xsl] how to get string value of element node without children concatenated
From: "XSLList" <xsllist@xxxxxxxxxxxxx>
Date: Fri, 14 Mar 2003 16:52:57 -0500

Craig, the string value of an element is the concatenation of all children
and text elements.  Use

select="normalize-space(text())" in your value-of to get what you want.

Jeff

>-----Original Message-----
>From: owner-xsl-list@xxxxxxxxxxxxxxxxxxxxxx
>[mailto:owner-xsl-list@xxxxxxxxxxxxxxxxxxxxxx]On Behalf Of
>Craig Kattner
>Sent: Friday, March 14, 2003 3:30 PM
>To: XSL List (E-mail)
>Subject: [xsl] how to get string value of element node without children
>concatenated
>
>
>I'm sure the answer is obvious, but I can't seem to find it.
>
>I have the following XML:
><?xml version="1.0" encoding="UTF-8" ?>
><switches>
>	<finishes>
>		<finish>
>			Almond Decorative
>			<hold>no</hold>
>		</finish>
>		<finish>
>			Commercial
>			<hold>no</hold>
>			<hold>yes</hold>
>		</finish>
>		<finish>
>			Ivory Decorative
>			<hold>no</hold>
>			<hold>yes</hold>
>		</finish>
>		<finish>
>			White Decorative
>			<hold>no</hold>
>		</finish>
>	</finishes>
></switches>
>
>And this stylesheet:
><?xml version="1.0" encoding="UTF-8"?>
><xsl:stylesheet version="1.0"
>xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
><xsl:output method="html" encoding="UTF-8" />
>
><xsl:template match="/">
>	<table border="1" cellspacing="0" cellpadding="0"
>cols="{count(//hold)+1}">
>		<tr class="finish">
>			<th rowspan="2">Time Cycle</th>
>			<xsl:apply-templates
>select="/switches/finishes" />
>		</tr>
>		<tr class="hold">
>			<xsl:apply-templates
>select="/switches/finishes/finish" mode="hold" />
>		</tr>
>	</table>
></xsl:template>
>
><xsl:template match="finishes">
>	<xsl:for-each select="finish">
>		<th colspan="{count(descendant::hold)}">
>			<xsl:value-of select="." />
>		</th>
>	</xsl:for-each>
></xsl:template>
>
><xsl:template match="finish" mode="hold">
>	<xsl:for-each select="hold">
>		<th>
>			<xsl:value-of select="current()" />
>		</th>
>	</xsl:for-each>
></xsl:template>
>
></xsl:stylesheet>
>
>Which produces the following output:
><table border="1" cellspacing="0" cellpadding="0" cols="7">
>	<tr class="finish">
>		<th rowspan="2">Time Cycle</th>
>		<th colspan="1">Almond Decorativeno</th>
>		<th colspan="2">Commercialnoyes</th>
>		<th colspan="2">Ivory Decorativenoyes</th>
>		<th colspan="1">White Decorativeno</th>
>	</tr>
>	<tr class="hold">
>		<th>no</th>
>		<th>no</th>
>		<th>yes</th>
>		<th>no</th>
>		<th>yes</th>
>		<th>no</th>
>	</tr>
></table>
>
>That's the correct output (according to Michael Kay's 2nd
>edition the string value of an element is the string value of
>the element and all it's children concatenated). But I need to
>get the string value WITHOUT the concatenation. IE I want my
>output to look like:
><table border="1" cellspacing="0" cellpadding="0" cols="7">
>	<tr class="finish">
>		<th rowspan="2">Time Cycle</th>
>		<th colspan="1">Almond Decorative</th>
>		<th colspan="2">Commercial</th>
>		<th colspan="2">Ivory Decorative</th>
>		<th colspan="1">White Decorative</th>
>	</tr>
>	<tr class="hold">
>		<th>no</th>
>		<th>no</th>
>		<th>yes</th>
>		<th>no</th>
>		<th>yes</th>
>		<th>no</th>
>	</tr>
></table>
>
>I'm having exactly zero luck on this one though. Using MSXML
>4.0 SP 1 for this.
>
>Craig
>
>
> XSL-List info and archive:  http://www.mulberrytech.com/xsl/xsl-list
>


 XSL-List info and archive:  http://www.mulberrytech.com/xsl/xsl-list



Current Thread
Keywords
xsl