Múltiples ramas

1. <xsl:choose> Condiciones de múltiples ramas

Estructura sintáctica (similar a if … else if … else)
<xsl:choose>
    <xsl:when test="expresión‑condicional">
        Contenido que se muestra si la condición se cumple
    </xsl:when>
    <xsl:when test="expresión‑condicional2">
        Contenido que se muestra si la condición 2 se cumple
    </xsl:when>
    <xsl:otherwise>
        Salida cuando ninguna condición when se satisface (opcional)
    </xsl:otherwise>
</xsl:choose>Lenguaje del código: HTML, XML (xml)
  1. Se evalúa de arriba hacia abajo; se detiene al primer <xsl:when> que cumpla la condición;
  2. <xsl:otherwise> debe colocarse después de todos los elementos <xsl:when>;
  3. Dentro de las expresiones, escribe > como &gt; y < como &lt;.
<?xml version="1.0" encoding="gb2312"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match="/">
<html>
<head></head>
<body>
<ul>
    <!-- Recorrer todos los estudiantes -->
    <xsl:for-each select="class/student">
        <!-- Ordenar por edad en orden ascendente -->
        <xsl:sort select="age"/>
        <!-- Filtrar estudiantes con altura superior a 160 -->
        <xsl:if test="height &gt; 160">
            <li>
                <xsl:value-of select="name"/>;
                <!-- Juicio múltiple: mostrar la edad en negrita si altura > 200 -->
                <xsl:choose>
                    <xsl:when test="height &gt; 200">
                        <b><xsl:value-of select="age"/></b>
                    </xsl:when>
                    <xsl:otherwise>
                        <xsl:value-of select="age"/>
                    </xsl:otherwise>
                </xsl:choose>
            </li>
        </xsl:if>
    </xsl:for-each>
</ul>
</body>
</html>
</xsl:template>
</xsl:stylesheet>Lenguaje del código: HTML, XML (xml)

Lógica de ejecución: Recorrer → ordenar por edad → filtrar altura > 160 → mostrar la edad en negrita si la altura supera los 200.

2. Solución de transformación XSLT del lado del navegador

No todos los navegadores admiten XSLT, pero se puede solucionar con los métodos siguientes. Actualmente la mayoría usa Chrome y Firefox, así que este problema casi desaparece, aunque vale la pena conocerlo.

1: Transformación cliente con JavaScript (solución para IE antiguo)

Principio: Al cargar la página se ejecuta JavaScript, lee el archivo XML y la hoja de estilo XSL, realiza la transformación dentro del navegador y genera HTML.

// Cargar XML
var xml = new ActiveXObject("Microsoft.XMLDOM");
xml.async = false;
xml.load("cdcatalog.xml");
// Cargar XSL
var xsl = new ActiveXObject("Microsoft.XMLDOM");
xsl.async = false;
xsl.load("cdcatalog.xsl");
// Transformar y mostrar resultado
document.write(xml.transformNode(xsl));Lenguaje del código: JavaScript (javascript)
  1. ActiveXObject solo funciona en versiones antiguas de IE, no es compatible con Chrome ni Firefox modernos;
  2. Depende del analizador XML nativo del navegador, su compatibilidad es baja.
2: Transformación del lado del servidor

Idea principal: No realizar la transformación en el navegador

La mayoría de proyectos usan este método. La transformación se completa en el servidor, eliminando problemas de compatibilidad de navegadores. Muchas empresas lo implementan de esta forma.

  1. En el backend (Java/PHP/.NET, etc.) se usa un motor XSLT para convertir previamente XML + XSL a XHTML;
  2. Se envía directamente la página HTML generada al navegador;
  3. Ventaja: Compatible con todos los navegadores, el cliente no necesita soportar XSLT.

3. Conceptos básicos de XPath

XPath es un lenguaje de consulta por rutas para documentos XML y es la base fundamental de XSLT.

  1. Localiza nodos XML mediante expresiones de ruta (similar a las rutas de archivos);
  2. Cuenta con librería de funciones estándar integrada para cálculos numéricos y tratamiento de cadenas;
  3. Es un estándar oficial del W3C;
  4. Todas las expresiones escritas dentro de select="" y test="" siguen la sintaxis XPath.

Resumen

EtiquetaEscenario de usoCaracterística de rama
<xsl:if>Juicio de condición simpleSolo rama verdadera, sin else
<xsl:choose>Juicio de múltiples condicionesMúltiples when + otherwise (equivalente a else)

Múltiples ramas

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *