Thanks to the power of the Internet, I am now less annoyed at XSLT. Chriztian Steinmeier wrote to suggest I try
xml:space, something I hadn’t previously come across. So the template now looks like this:
<xsl:template match="/archive" xml:space="preserve"> <div id="thoughts"> <h3> <span>Thoughts From Eric</span> </h3> <xsl:apply-templates select="//entry" /> </div> </xsl:template>
Ah, much better! On the other hand, I discovered when I applied
xml:space to another portion of my XSLT, it broke an
xsl:choose structure. I had to split one template up into three to sneak around that particular limitation, which some would say is a strength of the technology, since it forced me to further modularize my template.
If I’d been sufficiently determined to avoid splitting up that particular template, I could have used an idea sent in by Hugo Lopes. He wrote to suggest that I could use custom-defined entities, like so:
<!DOCTYPE stylesheet [ <!ENTITY sp "<xsl:text> </xsl:text>"> <!ENTITY cr "<xsl:text> </xsl:text>"> ]> <xsl:template match="/archive"> <div id="thoughts">&cr; <h3>&sp;<span>Thoughts From Eric</span>&sp;</h3>&cr; <xsl:apply-templates select="//entry" />&cr; </div> </xsl:template>
It’s a lot less ugly than what I had yesterday, I’ll agree, but in this particular situation
xml:space is a better route for me to take. Still, it’s an interesting solution to the problem, and a technique I’ll definitely keep in mind for future XSLT projects. Thanks to Hugo and Chriztian for the help!