Начните с шаблона идентификации, так как он будет обрабатывать копирование всех существующих узлов без изменений.
<xsl:template match="@*|node()">
<xsl:copy>
<xsl:apply-templates select="@*|node()" />
</xsl:copy>
</xsl:template>
Затем вы хотите, чтобы шаблон пропускал ns2:CU_DE_Fitnesfirst_INVOIC_CSV
, чтобы он не копировался в исходное положение
<xsl:template match="ns2:CU_DE_Fitnesfirst_INVOIC_CSV">
<xsl:apply-templates />
</xsl:template>
Вместо этого вам нужен шаблон, соответствующий Rechnungen
, где вы можете заменить его копией родительского элемента
<xsl:template match="Rechnungen">
<xsl:element name="{../name()}" namespace="{../namespace-uri()}">
<xsl:apply-templates />
</xsl:element>
</xsl:template>
Попробуйте это XSLT
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:ns2="http://test.com"
version="2.0">
<xsl:output method="xml" indent="yes" />
<xsl:template match="@*|node()">
<xsl:copy>
<xsl:apply-templates select="@*|node()" />
</xsl:copy>
</xsl:template>
<xsl:template match="ns2:CU_DE_Fitnesfirst_INVOIC_CSV">
<xsl:apply-templates />
</xsl:template>
<xsl:template match="Rechnungen">
<xsl:element name="{../name()}" namespace="{../namespace-uri()}">
<xsl:apply-templates />
</xsl:element>
</xsl:template>
</xsl:stylesheet>
Обратите внимание: если вы используете XSLT 3.0, вы можете немного привести в порядок код и сделать это вместо этого ....
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:ns2="http://test.com"
version="3.0">
<xsl:output method="xml" indent="yes" />
<xsl:mode on-no-match="shallow-copy"/>
<xsl:template match="ns2:CU_DE_Fitnesfirst_INVOIC_CSV">
<xsl:apply-templates />
</xsl:template>
<xsl:template match="Rechnungen">
<xsl:variable name="currentChildren" select="node()" />
<xsl:copy select="..">
<xsl:apply-templates select="$currentChildren" />
</xsl:copy>
</xsl:template>
</xsl:stylesheet>
Также обратите внимание, я не был уверен, был ли ns0:Messages
во входном XML или нет, или вы хотели добавить его. Если необходимо добавить этот шаблон, просто добавьте этот шаблон в один из приведенных выше XSLT:
<xsl:template match="/">
<ns0:Messages xmlns:ns0="http://sap.com/xi/XI/SplitAndMerge">
<ns0:Message1>
<xsl:apply-templates />
</ns0:Message1>
</ns0:Messages>
</xsl:template>