D04004451

XSLT 1.0 Remove xmlns = "" from the element

I have this xml message:

<Orders xmlns="http://AU.InputOrders"> <Order> <OrderRef>D04004451</OrderRef> <ABN>9780571244461</ABN> <OrderQty>1</OrderQty> </Order> <Order> <OrderRef>D04004451</OrderRef> <ABN>9780571254057</ABN> <OrderQty>1</OrderQty> </Order> <Order> <OrderRef>D04004452</OrderRef> <ABN>9781864489545</ABN> <OrderQty>1</OrderQty> </Order> </Orders> 

and this XSLT 1.0:

 <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:ns0="http://AU.InputOrders"> <xsl:output method="xml" encoding="utf-8" omit-xml-declaration="yes" indent="no"/> <xsl:template match="/"> <xsl:element name="Orders" namespace="http://AU.OutputOrders"> <xsl:apply-templates select="ns0:Orders/ns0:Order[1]" /> </xsl:element> </xsl:template> <xsl:template match="*"> <xsl:element name="{local-name()}"> <xsl:copy-of select="@*" /> <xsl:apply-templates select="node()" /> </xsl:element> </xsl:template> </xsl:stylesheet> 

The above XSLT gives me the following output:

 <Orders xmlns="http://AU.OutputOrders"><Order xmlns=""> <OrderRef>D04004451</OrderRef> <ABN>9780571244461</ABN> <OrderQty>1</OrderQty> </Order></Orders> 

This is almost what I need, but I do not want xlmns = "" after the Order node.

I want it:

 <Orders xmlns="http://AU.OutputOrders"><Order> <OrderRef>D04004451</OrderRef> <ABN>9780571244461</ABN> <OrderQty>1</OrderQty> </Order></Orders> 

Can someone help me? Thanks.

+6
source share
1 answer

You need to display other elements (matching * ) in the same namespace:

 <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:ns0="http://AU.InputOrders" xmlns="http://AU.OutputOrders"> <xsl:output method="xml" encoding="utf-8" omit-xml-declaration="yes" indent="no"/> <xsl:template match="/*"> <xsl:element name="{name()}" namespace="http://AU.OutputOrders"> <xsl:apply-templates select="ns0:Order[1]"/> </xsl:element> </xsl:template> <xsl:template match="*"> <xsl:element name="{name()}" namespace="http://AU.OutputOrders"> <xsl:apply-templates select="node()"/> </xsl:element> </xsl:template> </xsl:stylesheet> 
+2
source

Source: https://habr.com/ru/post/949276/


All Articles