El uso de condicionales y ciclos resulta esencial cuando se intentan manipular ciertos elementos en XML, a continuación se utilizan estas estructuras; los siguientes ejemplos están basados en el fragmento XML que se muestra a continuación:
<?xml version="1.0"?> <CentroRecreativo> <Miembro nivel="basica"> <Nombre>Jose </Nombre> <Telefono tipo="casa">5555-1234</Telefono> <Telefono tipo="trabajo">5555-4321</Telefono> <Casilla>8700</Casilla> </Miembro> <Miembro nivel="premier"> <Nombre>David</Nombre> <Telefono tipo="casa">3838-1234</Telefono> <Telefono tipo="trabajo">3838-4321</Telefono> <Casilla>5600</Casilla> </Miembro> <Miembro nivel="basica"> <Nombre>Rogelio</Nombre> <Telefono tipo="casa">8888-1234</Telefono> <Telefono tipo="trabajo">8888-4321</Telefono> <Casilla>4000</Casilla> </Miembro> </CentroRecreativo> |
<xsl:for-each>
Para extraer el valor de los diversos miembros es posible utilizar el siguiente template
:
<xsl:template match="CentroRecreativo"> Los miembros del centro son: <xsl:for-each select="Miembro"> Nombre : <xsl:value-of select="Nombre"/> Membresía : <xsl:value-of select="@nivel"/> </xsl:for-each> </xsl:template> |
Otro ejemplo de ciclo utilizado para extraer los valores de los elementos telefono
sería el siguiente:
<xsl:template match="Miembro"> <xsl:for-each select="Telefono"> <xsl:value-of select="@tipo"/> <xsl:value-of select="."/> </xsl:for-each> </xsl:template> |
<xsl:if>
El uso de condicionales en XSL permite una mayor flexibilidad al transformar elementos, el siguiente template
es utilizado para generar un mensaje en base al tipo de membresía del usuario:
<xsl:template match="CentroRecreativo"> Bienvenido <xsl:value-of select="Miembro/Nombre"/> <xsl:if test="Miembro/@nivel='premier'"> Por ser miembro especial le ofrecemos lo siguiente..... </xsl:if> <xsl:if test="Miembro/@nivel='basico'"> Le recordamos que si asciende su membresía a "premier" obtiene..... </xsl:if> </xsl:template> |
<xsl:sort>
En ciertas ocasiones resulta conveniente realizar un ordenamiento de los elementos XML dentro del "XSL Stylesheet", esto puede ser realizado através de <xsl:sort>
:
<xsl:template match="CentroRecreativo"> <xsl:for-each select="Miembro"> <xsl:sort select="Nombre"/> <xsl:sort select="Casilla"/> <xsl:apply-templates/> </xsl:for-each> </xsl:template> |
El template
anterior procesa el ciclo tomando como primer elemento el contenido en orden alfabético del elemento Nombre
, y en caso de existir ambigüedad toma como ordenamiento los valores del elemento Casilla
; los atributos opcionales para <xsl:sort>
son order
que puede tomar un valor asc
o desc
para indicar un ordenamiento ascendente o descendente respectivamente (asc
es por default) y data-type
que puede tomar un valor text
o number
para procesar el contenido como texto o número respectivamente (text
es por default) .
<xsl:choose>
Finalmente, vale mencionar el uso del elemento <xsl:choose>
que permite definir una serie de casos/opciones para determinados valores, este elemento es de utilidad para aquellas situaciones en las que se requiere seleccionar entre más de dos opciones, resultando más eficiente que emplear ciclos if's anidados:
<xsl:template match="CentroRecreativo"> <xsl:for-each select="Miembro/Nombre"> <xsl:choose> <xsl:when test="Miembro/@nivel='premier'"> Por ser miembro especial le ofrecemos lo siguiente..... </xsl:when> <xsl:when test="Miembro/@nivel='basico'"> Le recordamos que si asciende su membresía a "premier" obtiene..... </xsl:when> <xsl:otherwise> Actualmente no tiene asignada su membresía... </xsl:otherwise> </xsl:choose> </xsl:for-each> </xsl:template> |
El elemento <xsl:choose>
anida los elementos <xsl:when>
que contienen una evaluación/prueba escrita en XPath y el respectivo contenido a ejecutarse, y además se puede incluir el elemento <xsl:otherwise>
para ejecutarse en caso de no cumplirse ninguna evaluación definida en <xsl:when>
.
En la siguiente sección serán descritos otra serie de elementos que pueden ser empleados en "XSL Stylesheets" que facilitan la manipulación de variables y numeros, así como otras variaciones de elementos que pueden ser empleados en "XSL Stylesheets".
template
, XPath, Condicionales y Ciclos en XSL.