Jeremy C. Reed wrote:
<xsl:template match="text()">
<xsl:value-of select="translate(., '

', ' ')" />
</xsl:template>
But the above (as far as I can tell) applies to all my data. Do you have
any suggestions on how I can get it to only apply to data within the
<p>...</p> tags?
Try to restrict the tempalte match pattern:
<xsl:template match="text()[ancestor::p]">
<xsl:value-of select="translate(., '

', ' ')" />
</xsl:template>
A lazy way to avoid the template being triggered by text
in <pre> elemets would be
<xsl:template match="text()[ancestor::p][not(ancestor::pre)]">
This relies on the usual content model (no p nested in pre)
J.Pietschmann