[xsl] normalize-space problems with child elements

Subject: [xsl] normalize-space problems with child elements
From: "Jelks Cabaniss" <jelks@xxxxxxxx>
Date: Tue, 29 Mar 2005 12:39:03 -0500
I'm using the text output method to create a man page.

In my source XML, I have `<description>` elements which contain text and
`<code>` child elements.  `<description>` is "pretty printed" (indented and
with line breaks) which is easily fixed with "normalize-space".  So far so
good.  But that does weird stuff to the `<code>` child elements -- it
removes the space before and after the `<code>foo</code>` so that the word
"foo" adjoins the surrounding text in the description output.

Example:

    <description>This decribes how <code>FOO</code> is
    supposed to work.  Now "<code>bar</code>" is a
    different story altogether.</description>

...

    <xsl:template match="description">
      <xsl:apply-templates />
    </xsl:template>

    <xsl:template match="code">
      <xsl:apply-templates />
    </xsl:template>

    <xsl:template match="text()">
      <xsl:value-of select="normalize-space(.)" />
    </xsl:template>


Output:

    This decribes howFOOis supposed to work.
    Now "bar" is a different story altogether.


Since "bar" was surrounded by quotes and not whitespace, it worked.  But see
how "FOO" was mangled by "normalize-space"?

If I change the `code` template to add spaces before and after, it fixes
"FOO", but breaks "bar":

    <xsl:template match="code">
      <xls:text> </xls:text>
        <xsl:apply-templates />
      <xls:text> </xls:text>
    </xsl:template>

Is there a way to do this without involving a complex template with
substring processing, etc.?


/Jelks

Current Thread