Muhammad я же правильно понял - "удаление
лишних пробелов"?
красиво и "мало кода" не получится - функция replace с поддержкой regexp доступна только для версии >=2.0.
Для версии 1.0 единственное подходящее под задачу решение будет:
<xsl:stylesheet version="1.1"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match="p">
<xsl:copy-of select="."/>
</xsl:template>
<xsl:template match="dialog">
<p class="dialog">
<xsl:for-each select="./*|./text()">
<xsl:choose>
<xsl:when test="self::text()">
<xsl:value-of select="normalize-space(.)" />
</xsl:when>
<xsl:otherwise>
<xsl:text> </xsl:text>
<xsl:copy>
<xsl:copy-of select="./text()"/>
</xsl:copy>
<xsl:text> </xsl:text>
</xsl:otherwise>
</xsl:choose>
</xsl:for-each>
</p>
</xsl:template>
</xsl:stylesheet>
Результатом будет:
<?xml version="1.0"?>
<p>Lorem ipsum dolor sit amet,</p>
<p>Quibusdam dolore iure deleniti quasi accusantium non nostrum facere neque ducimus
mollitia et ex suscipit, placeat, eius maiores ratione cumque. <b>Provident</b> doloribus
natus perspiciatis quas id sequi neque, molestiae cupiditate facere quod. Dolore voluptate
consectetur:</p>
<p>aperiam nihil.</p>
<p class="dialog">aperiam nihil. aperiam <b>123</b> nihil. aperiam nihil. <b>123</b> </p>
Из минусов - будет ограничение на вложенное дерево элементов, хотя думаю можно допилить пример до использования шаблона в случае otherwise.