This is the mail archive of the
xsl-list@mulberrytech.com
mailing list .
Re: Continuing problem. &NotaWhitespace;?
On Thu, 1 Nov 2001 18:36:25 +0000, John Ericson wrote:
>On Nov 01 16:20, Jeni Tennison wrote:
>>[[snip]]
>> This gives you a template like:
>>
>> <xsl:template match="text()">
>> <xsl:variable name="normalizedString" select="normalize-space()" />
>> <xsl:if test="not(normalize-space(substring(., 1, 1)))">
>> <xsl:text> </xsl:text>
>> </xsl:if>
>> <xsl:value-of select="$normalizedString" />
>> <xsl:if test="not(normalize-space(substring(., string-length())))">
>> <xsl:text> </xsl:text>
>> </xsl:if>
>> </xsl:template>
>
>This is more like what I thought of, but this has the problem of that if
>the line contains several whitespaces in the beginning it will get *one*
>whitespace added to the beginning. It should have none in that case.
>
I think you are misreading Jeni's code. Given your input
<link url="231243342">SpazeIRC</link> blablablabla bla...
you will get
SpazeIRC blablablabla bla...
which is what you *said* you wanted.
If you had instead
<link url="231243342">SpazeIRC</link> blablablabla bla...
I assume you still want the result to have a single space between RC
and blabla, right?
>
>This would put *one* whitespace infront of the line who begins with *one*
>whitespace, not several.
Jeni's code does just this.
BTW earlier I wrote in response to Kevin's suggestion:
>One way to normalize the space at the ends of the text rather than
>losing it is to:
> add a character (x say) at the beginning and end of the string
> use normalize-space on it
> use substring to remove the first and last character from the result
> (i.e. the x's you added to begin with)
>Then if the text starts/ends with white space the result will get one
>space.
or to put it on a plate for you:
<xsl:template match="text()">
<!-- normalize-space removes external spaces, but we want them
normalised - so we make them internal by adding a couple of
extra characters. -->
<xsl:variable name="normalizedString"
select="normalize-space(concat('x', concat(., 'x')))" />
<!-- remove the extra characters when using the result -->
<xsl:value-of select="substring($normalizedString, 2,
string-length($normalizedString)-2)" />
</xsl:template>
This does the same as Jeni's version, but might be easier to follow.
Does that help?
If not, you will have to tell us *precisely* what you want done.
BTW please do not keep changing the subject line - it makes it very
hard to follow the thread.
Regards,
Trevor Nash
--
Traditional training & distance learning,
Consultancy by email
Melvaig Software Engineering Limited
voice: +44 (0) 1445 771 271
email: tcn@melvaig.co.uk
XSL-List info and archive: http://www.mulberrytech.com/xsl/xsl-list