Condicionales y Ciclos en XSL Stylesheets

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".

Menú Curso

XML y sus Orígenes

Manipulación y Proceso de XML

DOM, SAX y JDOM

Namespaces, Schemas y DTD's

XSL: XSLT, XPath y TraX

XMLRPC y SOAP (Web Services)

Diseño con XMLRPC

Diseño con SOAP .

Apéndice "A" (Procesando XML con parsers).

Apéndice "B" (Validando XML con Schemas y DTD's).

Apéndice "C" (XSL: XPath y "XSL Stylesheets").

Apéndice "D" (XMLRPC: Diseño).

Apéndice "E" (SOAP, WSDL, UDDI y WSIL : Diseño).