Это потому, что node()
также включает текстовые узлы. Если у вашего входного XML были разрывы строк, вы, возможно, заметили такие элементы, как <_Ver1/>
в ваших выходных данных.
Попробуйте что-то вроде этого:
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output indent="yes"/>
<xsl:variable name="suffix" select="'_Ver1'"/>
<xsl:template match="text()">
<xsl:copy>
<xsl:apply-templates/>
</xsl:copy>
</xsl:template>
<xsl:template match="*">
<xsl:element name="{concat(name(.),$suffix)}">
<xsl:copy-of select="@*"/>
<xsl:apply-templates/>
</xsl:element>
</xsl:template>
</xsl:stylesheet>
Я добавил шаблон для text()
, а также copy-of
для любых атрибутов, которые могут быть в XML.