Проблема в том, что во входном XML-коде и MainTag
, и DifferentTag
находятся в "http://abc123.com",, но вы учитываете это в своем XSLT, поэтому он пытается сопоставить теги вnamespace.
Вам необходимо объявить префикс в вашем XSLT и использовать его в совпадении.
Также обратите внимание, что ваш текущий XSLT имеет два шаблона, соответствующих MainTag
, когда один из них, вероятно, должен совпадатьDifferentTag
.
Попробуйте это XSLT:
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:n0="http://abc123.com"
exclude-result-prefixes="n0">
<xsl:output encoding='UTF-8' indent='yes' method='xml'/>
<xsl:template match="@* | node()">
<xsl:copy>
<xsl:apply-templates select="@* | node()"/>
</xsl:copy>
</xsl:template>
<xsl:template match="n0:MainTag">
<xsl:element name="ns0:{local-name()}" namespace="http://xyz987.com">
<xsl:apply-templates select="@* | node()" />
</xsl:element>
</xsl:template>
<xsl:template match="n0:DifferentTag">
<xsl:element name="ns0:{local-name()}" namespace="http://QWR.com">
<xsl:apply-templates select="@* | node()" />
</xsl:element>
</xsl:template>
<xsl:template match="*/*">
<xsl:element name="{local-name()}">
<xsl:apply-templates select="@* | node()" />
</xsl:element>
</xsl:template>
</xsl:stylesheet>
РЕДАКТИРОВАТЬ: Если вы действительно не знаете пространства имен во входном XML, попробуйте этот XSLT вместо ...
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output encoding='UTF-8' indent='yes' method='xml'/>
<xsl:template match="@* | node()">
<xsl:copy>
<xsl:apply-templates select="@* | node()"/>
</xsl:copy>
</xsl:template>
<xsl:template match="*[local-name() = 'MainTag']">
<xsl:element name="ns0:{local-name()}" namespace="http://xyz987.com">
<xsl:apply-templates select="@* | node()" />
</xsl:element>
</xsl:template>
<xsl:template match="*[local-name() = 'DifferentTag']">
<xsl:element name="ns0:{local-name()}" namespace="http://QWR.com">
<xsl:apply-templates select="@* | node()" />
</xsl:element>
</xsl:template>
<xsl:template match="*/*">
<xsl:element name="{local-name()}">
<xsl:apply-templates select="@* | node()" />
</xsl:element>
</xsl:template>
</xsl:stylesheet>