Это побочный эффект <xsl:apply-templates>
, который пытается найти подходящий шаблон для каждого дочернего узла, с которым он сталкивается, в сочетании с подразумеваемым XSLT «поведением по умолчанию».
В вашем случае встречаются <NewTag>
и <AnotherNewTag>
, но для этих узлов нет шаблонов.
Поведение по умолчанию (скрытый шаблон по умолчанию), которое ловит этот случай, копирует текстовое значение элемента в выходной поток.
Текстовое значение <NewTag>
равно «Hello», значение <AnotherNewTag>
- «Everyone», поэтому вы видите «HelloEveryone».
Если вы не хотите этого, напишите свой собственный шаблон, который перехватывает эти узлы:
<xsl:template match="NewTag|AnotherNewTag">
<xsl:copy-of select="." />
</xsl:template>
В качестве альтернативы, напишите тот, который перехватывает любой узел необработанного элемента:
<!-- empty templates do nothing (matched nodes do not appear in the output) -->
<xsl:template match="*" />
Если вы хотите скопировать необработанные узлы без изменений, но все же хотите рекурсивно применять шаблоны внутри них, то вам нужен шаблон идентификации (ответ @ Alejandro) -