Это преобразование (для демонстрационных целей новый заголовок встроен в таблицу стилей XSLT):
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:my="my:my">
<xsl:output omit-xml-declaration="yes"/>
<my:header>
<header>
<c>cccc</c>
</header>
</my:header>
<xsl:variable name="vHeaderDoc" select="document('')/*/my:header"/>
<xsl:template match="node()|@*">
<xsl:copy>
<xsl:apply-templates select="node()|@*"/>
</xsl:copy>
</xsl:template>
<xsl:template match="header">
<xsl:copy-of select="$vHeaderDoc/*"/>
</xsl:template>
</xsl:stylesheet>
при применении к предоставленному документу XML :
<doc1>
<header>
<a>aaaa</a>
<b>bbbb</b>
</header>
<content>
<z>zzzzzzzzzzzzz</z>
</content>
</doc1>
дает желаемый, правильный результат :
<doc1>
<header xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:my="my:my">
<c>cccc</c>
</header>
<content>
<z>zzzzzzzzzzzzz</z>
</content>
</doc1>
В случае real у вас будет :
<xsl:variable name="vHeaderDoc" select="document('Header.xml')"/>
и документ header
будет находиться в файле с именем 'Header.xml'
, который находится в том же каталоге, что и таблица стилей XSLT (если он находится в другом каталоге, измените URL документа соответствующим образом).
В реальном случае, узел пространства имен xsl:
не будет скопирован на элемент header
.
Примечание : использование стандартной функции XSLT document()
.