Sé que me falta algo aquí. En la transformación XSLT a continuación, el resultado real no coincide con el resultado deseado.¿Cómo aplico plantillas a cada nodo seleccionado en un for-each?
Dentro del for-each
, deseo aplicar la plantilla match="track"
a cada elemento track
seleccionado. Si entendí XSLT correctamente, con la configuración actual, solo los nodos secundarios de cada elemento track
seleccionado se comparan con las plantillas, no con los elementos track
.
¿Cómo puedo hacer que los elementos track
pasen por la plantilla como lo desee? ¿Debo reconsiderar mi enfoque completo?
Nota: La transformación se ejecuta con PHP. Las declaraciones XML se han omitido por brevedad. Documento
XML:
<album>
<title>Grave Dancers Union</title>
<track id="shove">Somebody To Shove</track>
<track id="gold">Black Gold</track>
<track id="train">Runaway Train</track>
<producer>Michael Beinhorn</producer>
</album>
hoja de estilo XSL:
<xsl:stylesheet version="1.1" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match="/album">
<ol>
<xsl:for-each select="track">
<li><xsl:apply-templates/></li>
</xsl:for-each>
</ol>
</xsl:template>
<xsl:template match="track">
<a href="{@id}"><xsl:apply-templates/></a>
</xsl:template>
</xsl:stylesheet>
Resultado:
<ol>
<li>Somebody To Shove</li>
<li>Black Gold</li>
<li>Runaway Train</li>
</ol>
Resultado deseado:
<ol>
<li><a href="shove">Somebody To Shove</a></li>
<li><a href="gold">Black Gold</a></li>
<li><a href="train">Runaway Train</a></li>
</ol>
Buena captura en la clasificación. Supongo que esta es la mejor solución, debido a la clasificación. – ndim
Podría haber jurado que ya probé esto, pero supongo que no. ¡Esto es exactamente lo que estaba buscando, sin embargo! – Jakob