I have a problem.
Element Response must be without namespaces (They are defined root element).
Input XSLT:
<xsl:stylesheet
xpath-default-namespace="http://www.iata.org/IATA/EDIST"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:h="http://www.iata.org/IATA/EDIST"
version="1.0"
>
<xsl:template match="h:Response[not(h:OrderViewProcessing)]">
<Response xmlns="http://www.iata.org/IATA/EDIST">
<OrderViewProcessing>
<MarketingMessages>
<MarketingMessage>
<Text>
Error text
</Text>
</MarketingMessage>
</MarketingMessages>
</OrderViewProcessing>
<xsl:apply-templates/>
</Response>
</xsl:template>
</xsl:stylesheet>
Output XML:
<Response xmlns:h="http://www.iata.org/IATA/EDIST"
namespace="http://www.iata.org/IATA/EDIST">
<OrderViewProcessing>
<MarketingMessages>
<MarketingMessage>
<Text>
Error Text
</Text>
</MarketingMessage>
</MarketingMessages>
</OrderViewProcessing>
</Response>
I need like XML:
<Response>
<OrderViewProcessing>
<MarketingMessages>
<MarketingMessage>
<Text>
Error Text
</Text>
</MarketingMessage>
</MarketingMessages>
</OrderViewProcessing>
</Response>
If you remove xmlns = "http://www.iata.org/IATA/EDIST" in XSLT, then xmlns = "" in XML becomes empty.
Update
This problem solved in this way:
<xsl:template match="h:Response[not(h:OrderViewProcessing)]">
<xsl:element name="Response" namespace="http://www.iata.org/IATA/EDIST">
<xsl:element name="OrderViewProcessing" namespace="http://www.iata.org/IATA/EDIST">
<xsl:element name="MarketingMessages" namespace="http://www.iata.org/IATA/EDIST">
<xsl:element name="MarketingMessage" namespace="http://www.iata.org/IATA/EDIST">
<xsl:element name="Text" namespace="http://www.iata.org/IATA/EDIST">
Error text
</xsl:element>
</xsl:element>
</xsl:element>
</xsl:element>
<xsl:apply-templates/>
</xsl:element>
</xsl:template>
Probably, solution must be better.
apimprefix isn't in your XSLT, so it must come from your input XML. We'll need to see the input XML to figure out where each namespace comes from and what context the given element is in.