NESTA PÁGINA
Visão geral dos modelos XSLT
Um script XSLT consiste em um ou mais conjuntos de regras chamados templates. Cada modelo é um segmento de código que contém regras a serem aplicadas quando um nó especificado for combinado. Você usa o <xsl:template>
elemento para criar modelos.
Existem dois tipos de modelos, nomeados e não identificados (ou compatíveis), e eles são descritos nas seções a seguir.
Modelos não identificados (match)
Modelos não nomeados, também conhecidos como modelos de correspondência, incluem um match
atributo que contém uma expressão XPath para especificar os critérios para nós sobre os quais o modelo deve ser invocado. No exemplo a seguir, o modelo se aplica ao elemento nomeado route
que é uma criança do contexto atual e que tem um elemento infantil nomeado next-hop
cujo valor começa com a corda 10.10.
.
<xsl:template match="route[starts-with(next-hop, '10.10.')]"> <!-- ... body of the template ... --> </xsl:template>
Por padrão, quando o XSLT processa um documento, ele atravessa recursivamente toda a hierarquia de documentos, inspecionando cada nó, procurando um modelo que corresponda ao nó atual. Quando um modelo de correspondência é encontrado, o conteúdo desse modelo é avaliado.
O <xsl:apply-templates>
elemento pode ser usado dentro de um modelo não identificado para limitar e controlar a travessia hierárquica de nós padrão do XSLT. Se o <xsl:apply-templates>
elemento tiver um select
atributo, apenas nós que correspondam à expressão XPath definida pelo atributo são atravessados. Caso contrário, todas as crianças do nó de contexto são atravessadas. Se o select
atributo for incluído, mas não corresponda a nenhum nós, nada é atravessado e nada acontece.
No exemplo a seguir, a regra do modelo combina com o <route>
elemento na hierarquia XML. Todos os nós contendo um changed
atributo são processados. Todos os <route>
elementos que contêm um changed
atributo são substituídos por um <new>
elemento.
<xsl:template match="route"> <new> <xsl:apply-templates select="*[@changed]"/> </new> </xsl:template>
O uso de modelos não identificados permite que o script ignore a localização de uma tag na hierarquia XML. Por exemplo, se você quiser converter todas as <author>
tags em <div class="author">
tags, usar templates permite que você escreva uma única regra que converte todas as <author>
tags, independentemente de sua localização no documento XML de entrada.
Para obter mais informações sobre como modelos não nomeados são usados em scripts, consulte xsl:template match="/" Template.
Modelos nomeados
Os modelos nomeados operam como funções em linguagens de programação tradicionais, embora com uma sintaxe verbosa. Quando a complexidade de um script aumenta ou um segmento de código aparece em vários lugares, você pode modular o código e criar templates nomeados. Como funções, os modelos nomeados aceitam argumentos e são executados apenas quando chamados explicitamente.
Você cria um modelo nomeado usando o <xsl:template>
elemento e definindo o name
atributo, que é semelhante a um nome de função em linguagens de programação tradicionais. Use a <xsl:param>
tag e seu name
atributo para definir parâmetros para o modelo nomeado e, opcionalmente, inclua o select
atributo para declarar valores padrão para cada parâmetro. O select
atributo pode conter expressões de XPath. Se o select
atributo não for definido, o parâmetro será padrão para uma cadeia vazia.
O exemplo a seguir cria um modelo nomeado my-template
e define três parâmetros, um dos quais padrão para a cadeia false
, e um dos quais padrão para o conteúdo do nó de elemento nomeado name
que é uma criança do nó de contexto atual. Se o script chamar o modelo e não passar em um parâmetro, o valor padrão será usado.
<xsl:template name="my-template"> <xsl:param name="a"/> <xsl:param name="b" select="'false'"/> <xsl:param name="c" select="name"/> <!-- ... body of the template ... --> </xsl:template>
Para invocar um modelo nomeado em um script, use o <xsl:call-template>
elemento. O name
atributo é necessário e define o nome do modelo que está sendo chamado. Quando processado, o <xsl:call-template>
elemento é substituído pelo conteúdo do <xsl:template>
elemento que ele nomeia.
Quando você invoca um modelo nomeado, você pode passar argumentos para o modelo, incluindo o <xsl:with-param>
elemento infantil e especificando o name
atributo. O valor do <xsl:with-param>
name
atributo deve combinar com um parâmetro definido no modelo real; caso contrário, o parâmetro é ignorado. Opcionalmente, você pode definir um valor para cada parâmetro com o select
atributo ou o conteúdo do <xsl:with-param>
elemento. Se você não definir um valor para o parâmetro no ambiente de chamada, o script passa no valor atual do parâmetro se ele foi inicializado anteriormente, ou gera um erro se o parâmetro nunca foi declarado. Para obter mais informações sobre parâmetros de aprovação, consulte a visão geral dos parâmetros XSLT.
No exemplo a seguir, o modelo my-template
é chamado com o parâmetro c
contendo o conteúdo do nó de elemento nomeado other-name
que é uma criança do nó de contexto atual.
<xsl:call-template name="my-template"> <xsl:with-param name="c" select="other-name"/> </xsl:call-template>
Por exemplo, mostrando como usar templates nomeados em um script de compromisso, veja Exemplo: Exija e restrinja declarações de configuração.