Ver Mensaje Individual
  #2 (permalink)  
Antiguo 29/10/2008, 22:28
Avatar de Ek-Balam
Ek-Balam
 
Fecha de Ingreso: octubre-2008
Mensajes: 21
Antigüedad: 15 años, 6 meses
Puntos: 2
Respuesta: XSLT para que usar xsl:element ?

Saludos, Monoswim.

En XSL, podemos usar ambos métodos para crear enlaces, pero la diferencia radica en:

1) Si usamos directamente la etiqueta <a> de enlace <a href="">...</a>, esta sólo se usa en el template root, o template raiz; y los enlaces son generados manualmente.

2) Si usamos la tag <xsl:element>, esta debe ser aplicada dentro de un template secundario y creará enlaces elaborados dinámicamente a partir de los url que aparezcan en nuestro archivo XML.

Ejemplo de un XML para obtener los enlaces. Copia y guarda como "
vinculos.xml":

<?xml version="1.0" encoding="iso-8859-1"?>
<?xml-stylesheet type="text/xsl" href="conv.xsl"?>
<ir>
<favoritos>
<pag dire="http://foros.forosmexico.com">Foros México</pag>
<pag dire="http://www.comunidaddehurones.com">Comunidad de Hurones</pag>
<pag dire="http://www.lawebdelprogramador.com">La Web del Programador</pag>
<pag dire="http://www.hotmail.com">Correo de Hotmail</pag>
<pag dire="http://www.mygnet.com">La Comunidad de Programación</pag>
</favoritos>
</ir>


Como verás, en los atributos "
dire" capturamos la url a la que enlazaremos de manera dinámica o recursiva en nuestro archivo XSL (el cuál generará una página web mediante xml/xsl). De hecho, cuando abramos nuestro archivo xml, se mostrará como una página web mediante el uso del xsl (supongo que tú ya lo sabes, pero hago referencia para los que no conozcan el uso de los xpath dentro de xsl).
Ahora te pongo el archivo xsl, desde el cuál generaremos los enlaces dinámicos y uno manual. Copia y guarda como "
conv.xsl":

<?xml version="1.0" encoding="iso-8859-1"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match="ir">

<html>
<head><title>Vínculos</title></head>
<body>
<table border="2" bordercolor="blue" cellspacing="5" cellpadding="5">
<tr>
<xsl:apply-templates select="favoritos" />
</tr>
</table>
<table border="2" bordercolor="red">
<tr>
<td><a href="http://www.google.com">Google</a></td>
</tr>
</table>

</body>
</html>

</xsl:template>

<xsl:template match="favoritos">
<xsl:for-each select="pag">
<td bgcolor="yellow">
<xsl:variable name="test">a</xsl:variable>
<xsl:element name="{$test}">
<xsl:attribute name="href"><xsl:value-of select="@dire" /></xsl:attribute>
<xsl:value-of select="." />
</xsl:element>
</td>
</xsl:for-each>
</xsl:template>

</xsl:stylesheet>


Como leerás en este archivo, únicamente hemos colocado de manera manual el enlace a Google, usando la tag <a>...</a>, y lo visualizaremos en una table con borde color rojo, mientras que los enlaces generados dinámicamente, obtenidos desde el xml, se verán en una table con borde azul.
Concluyendo, aunque ambos códigos trabajan igual tienen rangos de acción distinto.
El primer código que pusiste genera enlaces dinámicos obtenidos de un archivo xml. El segundo código es más lento, porque debemos capturar manualmente cada enlace que deseemos.
Buen día.
=0)