Вот как это сделать :
<!DOCTYPE xsl:stylesheet [ <!ENTITY nbsp " "> ]>
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output omit-xml-declaration="yes" indent="yes"/>
<xsl:template match="node()|@*">
<xsl:copy>
<xsl:apply-templates select="node()|@*"/>
</xsl:copy>
</xsl:template>
<xsl:template match=
"text()
[translate(normalize-space(), ' ','')
= ''
]"/>
</xsl:stylesheet>
Когда это преобразование применено к следующему XML-документу (тот, который вы предоставили, был сильно искажен - нечетко сформирован многими способами !!):
<!DOCTYPE node [ <!ENTITY nbsp " "> ]>
<node>
<node1> </node1>
<br></br>
<node1>
<node2><br/> </node2>
<br></br>
</node1>
<!--
and so on...
-->
</node>
тогда желаемый результат получается :
<node>
<node1/>
<br/>
<node1>
<node2>
<br/>
</node2>
<br/>
</node1><!--
and so on...
-->
</node>
Эта техника может быть обобщена :
В xsl: variable можно указывать все символы-пробелы, а затем просто переопределить правило идентификации с помощью этого шаблона :
<!DOCTYPE xsl:stylesheet [ <!ENTITY nbsp " "> ]>
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output omit-xml-declaration="yes" indent="yes"/>
<xsl:variable name="vwhiteSpace" select="' 	

 '"/>
<xsl:template match="node()|@*">
<xsl:copy>
<xsl:apply-templates select="node()|@*"/>
</xsl:copy>
</xsl:template>
<xsl:template match="text()">
<xsl:if test="translate(., $vwhiteSpace,'') != ''">
<xsl:copy-of select="."/>
</xsl:if>
</xsl:template>
</xsl:stylesheet>
И вы можете указать все дополнительные символы, которые вы считаете «пробелами» в $vwhiteSpace
Обновление : ОП указал в комментарии, что он на самом деле хочет видеть, является ли "узел" значимым или нет, а не "чистить узел".
Решение этого уже содержится в моем решении исходной задачи:
<xsl:variable name="vIsSignificant" select=
"translate(., $vwhiteSpace,'') != ''"/>