vinculado prefijo nombres lectura está espacio error definido xml xslt xml-namespaces

xml - prefijo - XSLT para cambiar el espacio de nombre en el elemento



el prefijo del espacio de nombres no está definido (1)

El siguiente XSLT lo ayudará a obtener los resultados deseados:

<xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:xsd="http://www.xx.com" xmlns:ns="http://www.mnv.com/elc/sap" exclude-result-prefixes="ns"> <xsl:output encoding=''UTF-8'' indent=''yes'' method=''xml''/> <!-- copy everything into the output --> <xsl:template match=''@*|node()''> <xsl:copy> <xsl:apply-templates select=''@*, node()''/> </xsl:copy> </xsl:template> <!-- template to match ns:IRenvelope element and creating a new element --> <xsl:template match="ns:IRenvelope"> <xsl:element name="IRL" namespace="http://www.xx.com"> <xsl:apply-templates select="@*, node()"/> </xsl:element> </xsl:template> <!-- template to change the namespace of the elements from "http://www.mnv.com/elc/sap" to "http://www.xx.com" --> <xsl:template match="ns:*"> <xsl:element name="{local-name()}" namespace="http://www.xx.com"> <xsl:apply-templates select="@*, node()"/> </xsl:element> </xsl:template> </xsl:stylesheet>

Aquí, las dos últimas plantillas coinciden con ns:IRenvelope y todos los elementos con espacio de nombre http://www.mnv.com/elc/sap , respectivamente. Usando el xsl:element y su atributo de espacio de nombres, podemos crear los nuevos elementos con el espacio de nombre deseado.

También puede declarar los espacios de nombres deseados con prefijos y crear elementos de la siguiente manera:

<xsd:IRL xmlns:xsd="http://www.xx.com"> ... </xsd:IRL>

Para XSLT-1.0:

Simplemente reemplace el , (coma) para usar un | (pipe) en apply-templates como el uso de la coma para secuenciar la acción es compatible con 2.0:

<xsl:apply-templates select="@* | node()"/>

Estoy intentando cambiar el espacio de nombre de un atributo de elemento usando el siguiente código xsl:

<xsl:stylesheet version=''2.0'' xmlns:xsl=''http://www.w3.org/1999/XSL/Transform'' xmlns:ns2="http://www.ean-ucc.org/schemas/1.3.1/eanucc"> <xsl:output encoding=''UTF-8'' indent=''yes'' method=''xml''/> <!-- copy everything into the output --> <xsl:template match=''@*|node()''> <xsl:copy> <xsl:apply-templates select=''@*|node()''/> </xsl:copy> </xsl:template> <xsl:template match="IRenvelope"> <IRL xmlns:xsd="http://www.xx.com"> <xsl:copy-of select="node()|@*"/> </IRL> </xsl:template> </xsl:stylesheet>

El mensaje xml que uso para probar es:

<GMessage xmlns="http://www.giffgaff.uk/CM/envelope"> <EnvelopeVersion>2.0</EnvelopeVersion> <body> <IRenvelope xmlns="http://www.mnv.com/elc/sap"> <Keys> <Key Type="TaxOfficeNumber">635</Key> </Keys> </IRenvelope> </body> </GMessage>

No pude hacer que funcione y el espacio de nombres no cambia, pero ofrece el mismo resultado. cualquier ayuda por favor?

La salida xml es la siguiente:

<GMessage xmlns="http://www.giffgaff.uk/CM/envelope"> <EnvelopeVersion>2.0</EnvelopeVersion> <body> <IRenvelope xmlns="http://www.xx.com"> <Keys> <Key Type="TaxOfficeNumber">635</Key> </Keys> </IRenvelope> </body> </GMessage>