Ответ 1
Причина в текстовых узлах только для пробелов, которые являются непосредственными братьями и сестрами для удаленных элементов.
Решение. Просто добавьте эту инструкцию XSLT, чтобы удалить любые текстовые узлы только с пробелом - еще до начала преобразования:
<xsl:strip-space elements="*"/>
Результат может потерять отступ - если да, добавьте это:
<xsl:output omit-xml-declaration="yes" indent="yes"/>
Полное преобразование становится:
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output omit-xml-declaration="yes" indent="yes"/>
<xsl:strip-space elements="*"/>
<xsl:template match="*">
<xsl:copy>
<xsl:copy-of select="@*" />
<xsl:apply-templates/>
</xsl:copy>
</xsl:template>
<xsl:template match="relation"/>
</xsl:stylesheet>
при применении к этому XML-документу (ни один не предоставлен!):
<nums>
<num>01</num>
<num>02</num>
<num>03</num>
<num>04</num>
<num>05</num>
<num>06</num>
<num>07</num>
<num>08</num>
<num>09</num>
<num>10</num>
<relation/>
<relation/>
<relation/>
<relation/>
<relation/>
<relation/>
<relation/>
<relation/>
</nums>
Получается требуемый, правильный результат (без заднего пробела):
<nums>
<num>01</num>
<num>02</num>
<num>03</num>
<num>04</num>
<num>05</num>
<num>06</num>
<num>07</num>
<num>08</num>
<num>09</num>
<num>10</num>
</nums>