По сути, вам необходимо преобразование XSL, которое создает новые элементы с одинаковыми именами, но с другим пространством имен.
Рассмотрим следующий входной XML:
<?xml version="1.0" encoding="UTF-8"?>
<test xmlns="http://tempuri.org/ns_old">
<child attrib="value">text</child>
</test>
Теперь вам нужен шаблон, который говорит: «скопируйте структуру и имя всего, что вы видите, но объявите новое пространство имен, пока вы там»:
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet
version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:old="http://tempuri.org/ns_old"
>
<xsl:output method="xml" version="1.0"
encoding="UTF-8" indent="yes" omit-xml-declaration="no"
/>
<xsl:template match="node()|@*">
<xsl:copy>
<xsl:apply-templates select="node()|@*"/>
</xsl:copy>
</xsl:template>
<xsl:template match="old:*">
<xsl:element name="{local-name()}" namespace="http://tempuri.org/ns_new">
<xsl:apply-templates select="node()|@*"/>
</xsl:element>
</xsl:template>
</xsl:stylesheet>
Когда вы запускаете вышеупомянутый XML через него, это выдает:
<?xml version="1.0" encoding="UTF-8"?>
<test xmlns="http://tempuri.org/ns_new">
<child attrib="value">text</child>
</test>
Все ваши элементы http://tempuri.org/ns_old
эффективно изменили свое пространство имен. Когда ваш входной XML имеет более одного пространства имен одновременно, XSL, скорее всего, должен быть немного расширен.