1. <xsl:choose> Condições com múltiplos ramos
Estrutura da sintaxe (similar ao if … else if … else)
<xsl:choose>
<xsl:when test="expressão‑condicional">
Conteúdo exibido quando a condição for verdadeira
</xsl:when>
<xsl:when test="expressão‑condicional2">
Conteúdo exibido quando a condição 2 for verdadeira
</xsl:when>
<xsl:otherwise>
Saída quando nenhuma condição when for atendida (opcional)
</xsl:otherwise>
</xsl:choose>Code language: HTML, XML (xml)
- A avaliação acontece de cima para baixo; a execução para no primeiro
<xsl:when>que satisfizer a condição; <xsl:otherwise>deve ser posicionado depois de todos os elementos<xsl:when>;- Dentro das expressões, escreva
>como>e<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>
<!-- Percorrer todos os alunos -->
<xsl:for-each select="class/student">
<!-- Ordenar por idade em ordem crescente -->
<xsl:sort select="age"/>
<!-- Filtrar alunos com altura maior que 160 -->
<xsl:if test="height > 160">
<li>
<xsl:value-of select="name"/>;
<!-- Julgamento múltiplo: exibir idade em negrito se 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>Code language: HTML, XML (xml)
Lógica de execução: Percorrer → ordenar por idade → filtrar altura > 160 → exibir a idade em negrito quando a altura ultrapassar 200.
2. Solução de transformação XSLT no lado do navegador
Nem todos os navegadores suportam XSLT, mas isso pode ser contornado com os métodos abaixo. Atualmente a maioria das pessoas usa Chrome e Firefox, então esse problema praticamente desapareceu, mas é interessante conhecer.
1: Transformação no cliente com JavaScript (solução para IE antigo)
Princípio: Quando a página carrega, o JavaScript é executado, lê o arquivo XML e a folha de estilo XSL, faz a transformação dentro do navegador e gera o HTML.
// Carregar XML
var xml = new ActiveXObject("Microsoft.XMLDOM");
xml.async = false;
xml.load("cdcatalog.xml");
// Carregar XSL
var xsl = new ActiveXObject("Microsoft.XMLDOM");
xsl.async = false;
xsl.load("cdcatalog.xsl");
// Transformar e exibir saída
document.write(xml.transformNode(xsl));Code language: JavaScript (javascript)
ActiveXObjectfunciona apenas em versões antigas do IE, não é compatível com Chrome e Firefox modernos;- Depende do analisador XML nativo do navegador, a compatibilidade é ruim.
2: Transformação no lado do servidor
Ideia central: Não executar a transformação dentro do navegador
Grande parte dos projetos adota essa abordagem. A transformação é finalizada no servidor, eliminando problemas de compatibilidade com navegadores. Muitas empresas implementam‑na dessa forma.
- No backend (Java/PHP/.NET e outros), usa‑se um motor XSLT para converter antecipadamente XML + XSL em XHTML;
- A página HTML já gerada é enviada diretamente ao navegador;
- Vantagem: Compatível com todos os navegadores, o cliente não precisa ter suporte a XSLT.
3. Conceitos básicos de XPath
XPath é uma linguagem de consulta por caminho para documentos XML e constitui a base principal do XSLT.
- Localiza nós do XML usando expressões de caminho (parecido com caminhos de arquivos);
- Possui biblioteca de funções padrão embutida para cálculos numéricos e manipulação de textos;
- É um padrão oficial do W3C;
- Todas as expressões dentro de
select=""etest=""seguem a sintaxe XPath.
Resumo
| Tag | Cenário de uso | Característica dos ramos |
|---|---|---|
<xsl:if> | Verificação de condição única | Apenas ramo verdadeiro, sem else |
<xsl:choose> | Verificação com múltiplas condições | Vários when + otherwise (equivalente ao else) |
Múltiplos ramos