Help us improve your experience.

Let us know what you think.

Do you have time for a two-minute survey?

 
 

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..

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.

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.

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.

Por exemplo, mostrando como usar templates nomeados em um script de compromisso, veja Exemplo: Exija e restrinja declarações de configuração.