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)
- Se evalúa de arriba hacia abajo; se detiene al primer
<xsl:when>que cumpla la condición; <xsl:otherwise>debe colocarse después de todos los elementos<xsl:when>;- Dentro de las expresiones, escribe
>como>y<como<.
<?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 > 160">
<li>
<xsl:value-of select="name"/>;
<!-- Juicio múltiple: mostrar la edad en negrita si altura > 200 -->
<xsl:choose>
<xsl:when test="height > 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)
ActiveXObjectsolo funciona en versiones antiguas de IE, no es compatible con Chrome ni Firefox modernos;- 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.
- En el backend (Java/PHP/.NET, etc.) se usa un motor XSLT para convertir previamente XML + XSL a XHTML;
- Se envía directamente la página HTML generada al navegador;
- 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.
- Localiza nodos XML mediante expresiones de ruta (similar a las rutas de archivos);
- Cuenta con librería de funciones estándar integrada para cálculos numéricos y tratamiento de cadenas;
- Es un estándar oficial del W3C;
- Todas las expresiones escritas dentro de
select=""ytest=""siguen la sintaxis XPath.
Resumen
| Etiqueta | Escenario de uso | Característica de rama |
|---|---|---|
<xsl:if> | Juicio de condición simple | Solo rama verdadera, sin else |
<xsl:choose> | Juicio de múltiples condiciones | Múltiples when + otherwise (equivalente a else) |
Múltiples ramas