Digamos que tengo un documento XML como esto:mediante XSLT apply-templates de forma condicional seleccione los nodos
<director>
<play>
<t>Nutcracker</t>
<a>Tom Cruise</a>
</play>
<play>
<t>Nutcracker</t>
<a>Robin Williams</a>
</play>
<play>
<t>Grinch Stole Christmas</t>
<a>Will Smith</a>
</play>
<play>
<t>Grinch Stole Christmas</t>
<a>Mel Gibson</a>
</play>
</director>
Ahora quiero ser capaz de seleccionar todas las jugadas con Will Smith como actor y cambiar el formato en algo como esto:
<Plays>
<Play title="Grinch Stole Christmas">
<star>Will Smith</star>
<star>Mel Gibson</star>
</Play>
</Plays>
yo sólo quiero usar apply-templates .. Sin XSL: si o para cada bucles (he ideado este ejemplo como una versión más simple de lo que estoy haciendo lo que me puede ayudar entender cómo usar xpath dentro de una declaración de coincidencia)
Esto es lo que tengo hasta ahora:
<?xml version="1.0"?>
<xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="xml" indent="yes" />
<xsl:template match="/director">
<Plays>
<xsl:apply-templates select="play"/>
</Plays>
</xsl:template>
<xsl:template match="play[a='Will Smith']">
<play title="{data(t)[1]}">
<xsl:apply-templates select="a"/>
</play>
</xsl:template>
<xsl:template match="a">
<star>
<xsl:value-of select="."/>
</star>
</xsl:template>
</xsl:stylesheet>
Básicamente sólo soy seguro de cómo filtrar los nodos utilizando XPath en el atributo partido de la plantilla. ¡Cualquier ayuda sería genial!
¿Qué significa lo que has hecho hasta ahora? –
La siguiente solución lo resolvió ... Gracias por comentar al menos :) – Msencenb
Buena pregunta, +1. Vea mi respuesta para dos soluciones eficientes :) –