954,598 Members — Technology Publication meets Social Media
Username:
Password:
Lost login information?
Have something to say? Contribute New Article Reply to this Article

Transforming XML with XSLT

How do I preserve things like tabs and carriage returns in text? when transforming XML to XHTML with XSL. For example:

XML

<?xml version="1.0" encoding="ISO-8859-1"?>
<?xml-stylesheet type="text/xsl" href="article.xsl"?>
<content>
	<article name="Test Article">
		<heading>Test Article</heading>
		<subheading>Special Chars</subheading>
		<paragraph>
			<text>
				a less than &lt;
				a greater than &gt; 
			</text>
			<text type="code">
				some code.
			</text>
		</paragraph>
	</article>
</content>


XSL

<?xml version="1.0" encoding="ISO-8859-1"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> 

<xsl:template match="content">
	<xsl:apply-templates select="article" />
</xsl:template>

<xsl:template match="article">
	<h2><xsl:value-of select="heading" /></h2>
	<xsl:value-of select="subheading" />
	<xsl:for-each select="paragraph">
		<p>
		<xsl:for-each select="text">
		<xsl:choose>
			<xsl:when test="@type = 'link'">
				<a href="{@href}" target="{@target}">
				<xsl:value-of select="." />
				</a>
			</xsl:when>
			<xsl:when test="@type = 'code'">
				<div class="code">
				
				<xsl:value-of select="." />
				
				</div>
			</xsl:when>
			<xsl:otherwise>
				
				<xsl:value-of select="." />
				
			</xsl:otherwise>
		</xsl:choose>
		</xsl:for-each>
	</xsl:for-each>
</xsl:template>

</xsl:stylesheet>


The carriage return between the text line:
a less than <
And
a greater than >

is lost when rendered in the browser, I sort of understand why that is, but I don't know how to apply XML or XSL to include/preserve or force the carriage return.

hollystyles
Veteran Poster
1,182 posts since Feb 2005
Reputation Points: 262
Solved Threads: 68
 

Is there a way to make substitutions? I know nothing of xslt, but you want to substitute a
tag where ever the style sheet encounters the >

If you are generating the xml yourself, you might try this:

<text>
  <table>
    <tr>
      <td>a less than</td>
      <td>a greater than</td>
    </tr>
  </table 
</text>


Hope this helps.. :sad:

DanceInstructor
Posting Whiz
368 posts since Feb 2005
Reputation Points: 17
Solved Threads: 14
 
DaveSW
Master Poster
769 posts since Jul 2004
Reputation Points: 54
Solved Threads: 20
 

Thanks guys.

I followed Daves links, it tells me XSL preserves whitespace by default. What I havn't mentioned is that in my particular scenario i'm using client javascript transformNode function and I can't be certain if that is doing what it should.

Anyway I have plenty of options to try now. If I nail it, i'll post the horrid details.

hollystyles
Veteran Poster
1,182 posts since Feb 2005
Reputation Points: 262
Solved Threads: 68
 

You need to replace the line carriage characters with
tags.

tgreer
Made Her Cry
Team Colleague
2,118 posts since Dec 2004
Reputation Points: 227
Solved Threads: 37
 

This article has been dead for over three months

Post: Markdown Syntax: Formatting Help
You