|
Subject: RE: [xsl] Mistake in tokenizing under Saxon 8.2 From: "Michael Kay" <mike@xxxxxxxxxxxx> Date: Fri, 21 Jan 2005 10:40:49 -0000 |
The spaces that you get in your output are not being copied from the input,
they are being generated by virtue of the rule that a single space is
inserted between adjacent atomic values delivered in the result of a content
constructor. This space isn't inserted between a string and a node, only
between two strings.
(The reason for this rule is primarily for the case where you are generating
list-valued simple content, e.g. ("red", "blue", "green"). It's less
satisfactory when generating complex content. It means that you need to
understand the rather subtle distinction between a string and a text node:
<xsl:value-of select="'a'"/> outputs a text node, while <xsl:sequence
select="'a'"/> outputs a string. <xsl:copy-of/> produces whatever it is
given, which in this case is a string. Text nodes are output without
generating separator spaces.)
I think that if you output a text node containing a single space either side
of the <a> element, you will get the required effect. You can do this with
<xsl:text> </xsl:text>
Michael Kay
http://www.saxonica.com/
> -----Original Message-----
> From: Nicholas Hemley [mailto:Nicholas.Hemley@xxxxxxxxxxxxxxx]
> Sent: 21 January 2005 09:50
> To: xsl-list@xxxxxxxxxxxxxxxxxxxxxx
> Subject: [xsl] Mistake in tokenizing under Saxon 8.2
>
> Hello,
>
> I presume that I have made a mistake somewhere in the stylesheet when
> using the tokenize function under Saxon 8.2 - for some reason I am
> loosing the whitespace chars around the matched regular expression.
>
> For example, the following pattern:
> text text [link,alt,link_text] text
>
> should be transformed to:
>
> text text <a href="link" alt="alt">link text</a> text
>
> BUT
>
> I am loosing the whitespasce characters around the <a> as follows:
>
> text text<a href="link" alt="alt">link text</a>text
> ^
>
> ^
> Why is this please? All the other whitespace chars are copied OK, even
> though I am tokenising on whitespace.
>
> If I use a in the stylesheet to compensate for the
> loss, it adds
> two spaces, not one, which is wierd, so this is not currently a viable
> solution.
>
> Any input appreciated!
>
> Many thanks,
> Nic.
>
> Appendix: Stylesheet Snippet
>
> <xsl:template match="/html/body/P|p">
> <!-- copy node plus select contents -->
> <xsl:copy>
>
> <xsl:variable name="tokens" select="tokenize(.,'\s+')"/>
>
> <xsl:for-each select="$tokens">
>
> <xsl:choose>
> <xsl:when test='matches(.,"\[(.*),(.*),(.*)\]")'>
>
> <xsl:variable name="elValue" select="."/>
>
> <xsl:analyze-string select="$elValue"
> regex="\[(.*),(.*),(.*)\]">
>
> <xsl:matching-substring>
> <a href="{regex-group(1)}">
> <xsl:attribute name='alt'>
> <xsl:value-of
> select='replace(regex-group(3), "_"," ")'/>
> </xsl:attribute>
> <xsl:value-of
> select='replace(regex-group(2), "_"," ")'/>
> </a>
> </xsl:matching-substring>
>
> </xsl:analyze-string>
>
> </xsl:when>
> <xsl:otherwise>
> <xsl:copy-of select="."/>
> </xsl:otherwise>
> </xsl:choose>
> </xsl:for-each>
> </xsl:copy>
> </xsl:template>
>
>
>
> **********************************************************************
> The information contained in this message may be confidential
> or legally privileged and is intended for the addressee only,
> If you have received this message in error or there are any
> problems please notify the originator immediately. The
> unauthorised use, disclosure, copying or alteration of this
> message is strictly forbidden.
> **********************************************************************
| Current Thread |
|---|
|
| <- Previous | Index | Next -> |
|---|---|---|
| [xsl] Mistake in tokenizing under S, Nicholas Hemley | Thread | RE: [xsl] Mistake in tokenizing und, Nicholas Hemley |
| Re: [xsl] getting xsl:with-param to, David Carlisle | Date | RE: [xsl] Equivalent of href in FO, Jarno.Elovirta |
| Month |