Xslt cambia el nodo y agrega el espacio de nombres

Tengo un siguiente XML

<?xml version="1.0"?>
<location>
<Destination>Des01</Destination>
<DesCode>ACD8701</DesCode>
<UniqueId>023154</UniqueId>
<Amount>26</Amount>
</location>

Quiero cambiar el <location> dentro <abc_ItemUpdate> y agregue un espacio de nombres para que la salida se vea como la siguiente después de usar XSLT

<ns0:abc_ItemUpdate xmlns:ns0="http://schemas.microsoft.com/Sql/2008/05/TypedProcedures/dbo">
    <ns0:Destination>Des01</ns0:LegalEntity>
    <ns0:DesCode>ACD8701</ns0:DesCode>
    <ns0:UniqueId>023154</ns0:UniqueId>
    <ns0:Amount>26</ns0:Amount>
</ns0:abc_ItemUpdate>

Gracias por adelantado

preguntado el 12 de junio de 12 a las 21:06

1 Respuestas

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">

    <xsl:output indent="yes"/>

 <xsl:template match="/location">

     <xsl:element name="ns0:abc_ItemUpdate" namespace="http://yournms">
         <!-- copy attributes if any -->
         <xsl:copy-of select="@*"/>
         <xsl:apply-templates/>
     </xsl:element>

 </xsl:template>

 <xsl:template match="*">
     <xsl:element name="ns0:{name()}" namespace="http://yournms">
         <!-- copy attributes if any -->
         <xsl:copy-of select="@*"/>
         <xsl:apply-templates/>
     </xsl:element>
 </xsl:template>

</xsl:stylesheet>

Respondido el 12 de junio de 12 a las 23:06

Yo haría un cambio menor: usar name="ns0:{local-name()}" por lo que aún funciona si se aplica a la entrada que ya usa prefijos de espacio de nombres. - Michael Kay

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.