2011-08-30 29 views
16

Ésta es mi XML¿Cómo puedo cambiar el nombre etiquetas XML mediante XSLT

<CATALOG> 
    <NAME>C1</NAME> 
    <CD> 
    <NAME>Empire Burlesque</NAME> 
    <ARTIST>Bob Dylan</ARTIST> 
    <COUNTRY>USA</COUNTRY> 
    <COMPANY>Columbia</COMPANY> 
    <PRICE>10.90</PRICE> 
    <YEAR>1985</YEAR> 
    </CD> 
    <CD> 
    <NAME>Hide your heart</NAME> 
    <ARTIST>Bonnie Tyler</ARTIST> 
    <COUNTRY>UK</COUNTRY> 
    <COMPANY>CBS Records</COMPANY> 
    <PRICE>9.90</PRICE> 
    <YEAR>1988</YEAR> 
    </CD> 
</CATALOG> 

quiero reemplazar la etiqueta de nombre en el catálogo de nombre-catálogo y la etiqueta NAME de CD a CD-NOMBRE lo que debería hacer mi mirada xml así-

<CATALOG> 
     <CATALOG-NAME>C1</CATALOG-NAME> 
     <CD> 
     <CD-NAME>Empire Burlesque</CD-NAME> 
     <ARTIST>Bob Dylan</ARTIST> 
     <COUNTRY>USA</COUNTRY> 
     <COMPANY>Columbia</COMPANY> 
     <PRICE>10.90</PRICE> 
     <YEAR>1985</YEAR> 
     </CD> 
     <CD> 
     <CD-NAME>Hide your heart</CD-NAME> 
     <ARTIST>Bonnie Tyler</ARTIST> 
     <COUNTRY>UK</COUNTRY> 
     <COMPANY>CBS Records</COMPANY> 
     <PRICE>9.90</PRICE> 
     <YEAR>1988</YEAR> 
     </CD> 
    </CATALOG> 
+0

he estado tratando mediante XSLT y yo No encuentro ninguna función que pueda cambiar el vale de la etiqueta. El ejemplo que publiqué arriba es similar a lo que necesito hacer con un archivo XML más grande donde estaría reemplazando etiquetas. – Srinivas

Respuesta

30

utilizar la identidad transformar con sustituciones de los elementos que desea cambiar el nombre:

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> 
    <xsl:template match="@*|node()"> 
     <xsl:copy> 
      <xsl:apply-templates select="@*|node()" /> 
     </xsl:copy> 
    </xsl:template> 
    <xsl:template match="CD/NAME"> 
     <CD-NAME><xsl:apply-templates select="@*|node()" /></CD-NAME> 
    </xsl:template> 
    <xsl:template match="CATALOG/NAME"> 
     <CATALOG-NAME><xsl:apply-templates select="@*|node()" /></CATALOG-NAME> 
    </xsl:template> 
</xsl:stylesheet> 
+0

¿Puede incluir una descripción de 1 línea de cómo funciona este código? ¡Gracias! – Akhoy

+0

La transformación de identidad produce una salida idéntica a su entrada. En este caso, modificamos ligeramente la transformación de identidad para que coincida con los elementos 'CD/NAME' y' CATALOG/NAME' y producimos la salida renombrada para esos nombres de etiqueta en particular. Todo lo demás se mantiene igual. Este es un patrón común. –

Cuestiones relacionadas