This is the mail archive of the
xsl-list@mulberrytech.com
mailing list .
losing significant whitespace with normalize-space
- From: "Bradford, Denis" <denisb at rational dot com>
- To: "'XSL-List at lists dot mulberrytech dot com'" <XSL-List at lists dot mulberrytech dot com>
- Date: Tue, 16 Jul 2002 15:22:03 -0400
- Subject: [xsl] losing significant whitespace with normalize-space
- Reply-to: xsl-list at lists dot mulberrytech dot com
Generating text output (an apropos file) from a docbook reference manual,
I'm not able to preserve whitespace around the inline <command> elements in
the <refpurpose> element below.
Code snippet:
<refentry>
<refnamediv>
<refname>
<indexterm><primary>configuration records</primary></indexterm>
catcr
</refname>
<refpurpose>Displays configuration record
created by <command>xmake</command>, <command>ymake</command>
, or <command>xaudit</command>
</refpurpose>
The desired output is a single line, like this:
catcr Displays configuration record created by xmake,
ymake, or xaudit
What I'm getting is this:
catcr Displays configuration record created
byxmake,ymake, orxaudit
Using normalize-space is the only way I've found to eliminate the newlines,
but then I lose the whitespace around the command elements is stripped. The
preserve-space (and strip-space) functions don't seem to have any effect,
presumably because refpurpose is not a text-only element. Here's the current
state of the stylesheet - can anybody suggest what I'm doing wrong?
<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
version="1.0">
<xsl:output method="text"
indent="no"/>
<xsl:preserve-space elements="refpurpose"/>
<xsl:template match="/">
<xsl:variable name="newline">
<xsl:text>
</xsl:text>
</xsl:variable>
<xsl:for-each select="book/reference/refentry/refnamediv">
<xsl:apply-templates select="refname"/>
<xsl:apply-templates select="refpurpose">
<xsl:with-param name="refnameLen"
select="string-length(refname/text())"/>
<xsl:with-param name="refnameField" select="'
'"/>
</xsl:apply-templates>
<xsl:value-of select="$newline"/>
</xsl:for-each>
</xsl:template>
<xsl:template match="refname">
<xsl:apply-templates/>
</xsl:template>
<xsl:template match="refpurpose">
<xsl:param name="refnameField"/>
<xsl:param name="refnameLen"/>
<xsl:value-of select="substring($refnameField,$refnameLen)"/> <!-- Pad
with 25 spaces minus refname -->
<xsl:apply-templates/>
</xsl:template>
<xsl:template match="*/text()">
<xsl:value-of select="normalize-space(.)"/>
</xsl:template>
<xsl:template match="indexterm"></xsl:template>
<xsl:template match="indexterm/primary"></xsl:template>
<xsl:template match="indexterm/secondary"></xsl:template>
<xsl:template match="indexterm/secondary"></xsl:template>
</xsl:stylesheet>
XSL-List info and archive: http://www.mulberrytech.com/xsl/xsl-list