Subject: RE: 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: 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 |
|
XSLList - Fri, 14 Mar 2003 16:49:01 -0500 (EST) <=
Peter Flynn - Sat, 15 Mar 2003 18:27:36 -0500 (EST)
Piez Janet - Fri, 14 Mar 2003 16:56:10 -0500 (EST)
|
|