Múltiplos ramos

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)
  1. A avaliação acontece de cima para baixo; a execução para no primeiro <xsl:when> que satisfizer a condição;
  2. <xsl:otherwise> deve ser posicionado depois de todos os elementos <xsl:when>;
  3. Dentro das expressões, escreva > como &gt; e < 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>
    <!-- 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 &gt; 160">
            <li>
                <xsl:value-of select="name"/>;
                <!-- Julgamento múltiplo: exibir idade em negrito se 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>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)
  1. ActiveXObject funciona apenas em versões antigas do IE, não é compatível com Chrome e Firefox modernos;
  2. 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.

  1. No backend (Java/PHP/.NET e outros), usa‑se um motor XSLT para converter antecipadamente XML + XSL em XHTML;
  2. A página HTML já gerada é enviada diretamente ao navegador;
  3. 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.

  1. Localiza nós do XML usando expressões de caminho (parecido com caminhos de arquivos);
  2. Possui biblioteca de funções padrão embutida para cálculos numéricos e manipulação de textos;
  3. É um padrão oficial do W3C;
  4. Todas as expressões dentro de select="" e test="" seguem a sintaxe XPath.

Resumo

TagCenário de usoCaracterística dos ramos
<xsl:if>Verificação de condição únicaApenas ramo verdadeiro, sem else
<xsl:choose>Verificação com múltiplas condiçõesVários when + otherwise (equivalente ao else)

Múltiplos ramos

Deixe um comentário

O seu endereço de email não será publicado. Campos obrigatórios marcados com *