Visão geral dos parâmetros XSLT
Os parâmetros podem ser passados para modelos nomeados ou não identificados. Dentro do modelo, os parâmetros devem ser declarados e podem então ser referenciados prefixando seu nome com o sinal de dólar ($).
Declaração de parâmetros
O escopo de um parâmetro pode ser global ou local. Um parâmetro cujo valor é definido pelo Junos OS na inicialização de scripts deve ser definido como um parâmetro global. As declarações de parâmetros globais são colocadas logo após as declarações da folha de estilo. Um script pode atribuir um valor padrão ao parâmetro global, que é usado caso o Junos OS não dê valor ao parâmetro.
<?xml version="1.0" standalone="yes"?> <xsl stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:junos="http://xml.juniper.net/junos/*/junos" xmlns:xnm="http://xml.juniper.net/xnm/1.1/xnm" xmlns:jcs="http://xml.juniper.net/junos/commit-scripts/1.0" xmlns:ext="http://xmlsoft.org/XSLT/namespace" version="1.0"> <!-- global parameter --> <xsl:param name="interface1"/>
Os parâmetros locais devem ser declarados no início de um bloco e seu escopo está limitado ao bloco em que são declarados. Dentro de um modelo, você declara parâmetros usando a tag e name
o <xsl:param>
atributo. Opcionalmente, declare valores padrão para cada parâmetro, incluindo o select
atributo, que pode conter expressões XPath. Se um modelo for invocado sem o parâmetro, a expressão padrão é avaliada e os resultados serão atribuídos ao parâmetro. Se você não definir um valor padrão no modelo, o parâmetro é padrão para uma string vazia.
O modelo print-host-name
indicado a seguir declara o parâmetro message
e define um valor padrão:
<xsl:template name="print-host-name"> <xsl:param name="message" select="concat('host-name: ', system/host-name)"/> <xsl:value-of select="$message"/> </xsl:template>
O modelo acessa o valor do message
parâmetro prefixando o nome do parâmetro com o sinal de dólar ($).
Parâmetros de aprovação
Quando você invoca um modelo, você passa argumentos para o modelo usando o elemento e name
o <xsl:with-param>
atributo. O valor do <xsl:with-param>
name
atributo deve corresponder ao nome de um parâmetro definido no modelo real; caso contrário, o parâmetro é ignorado. Opcionalmente, para cada parâmetro que você passa para um modelo, você pode definir um valor usando o select
atributo ou o conteúdo do <xsl:with-param>
elemento.
O valor do parâmetro que é usado em um modelo depende de como o modelo é chamado. Os três exemplos a seguir, que chamam de print-host-name
modelo, ilustram os possíveis ambientes de chamada.
Se você chamar um modelo, mas não incluir o <xsl:with-param>
elemento para um parâmetro específico, a expressão padrão definida no modelo é avaliada e os resultados são atribuídos ao parâmetro. Se não houver valor padrão para esse parâmetro no modelo, o parâmetro será padrão para uma string vazia. O exemplo a seguir chama o modelo print-host-name
nomeado, mas não inclui nenhum parâmetro na chamada. Neste caso, o modelo nomeado usará o valor padrão para o message
parâmetro que foi definido no print-host-name
modelo ou uma string vazia se não houver padrão.
<xsl:template match="configuration"> <xsl:call-template name="print-host-name"/> </xsl:template>
Se você chamar um modelo e incluir um parâmetro, mas 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. O exemplo a seguir chama o modelo print-host-name
nomeado e passa no message
parâmetro, mas não inclui um valor. Se message
for declarado e inicializado no script, e o escopo for visível para o bloco, o valor atual é message
usado. Se message
for declarado no script, mas não inicializado, o valor será message
uma corda vazia. Se message
não tiver sido declarado, o script produz um erro.
<xsl:template match="configuration"> <xsl:call-template name="print-host-name"> <xsl:with-param name="message"/> </xsl:call-template> </xsl:template>
Se você chamar um modelo, incluir o parâmetro e definir um valor para o parâmetro, o modelo usa o valor fornecido. O exemplo a seguir chama o modelo print-host-name
nomeado com o message
parâmetro e um valor definido, de modo que o modelo usa o novo valor.
<xsl:template match="configuration"> <xsl:call-template name="print-host-name"> <xsl:with-param name="message" select=concat"('Host-name passed in: ', system/host-name)"/> </xsl:call-template> </xsl:template>
Exemplo: parâmetros e modelos de correspondência
O modelo a seguir está em /
correspondência com a raiz do documento XML. Em seguida, ele gera um elemento chamado <outside>
, que é adicionado ao documento de saída, e instrui o processo de gerenciamento do Junos OS (mgd) a aplicar modelos de forma recursiva à configuration/system
sub-árvore. O parâmetro host
é usado no processamento de quaisquer nós correspondentes. O valor do host
parâmetro é o valor da host-name
declaração no [edit system
] nível da hierarquia de configuração.
<xsl:template match="/"> <outside> <xsl:apply-templates select="configuration/system"> <xsl:with-param name="host" select="configuration/system/host-name"/> </xsl:apply-templates> </outside> </xsl:template>
O modelo a seguir combina com o <system>
elemento, que é o topo da sub-árvore selecionada no exemplo anterior. O host
parâmetro é declarado sem valor padrão. Um <inside>
elemento é gerado, que contém o valor do host
parâmetro que foi definido na <xsl:with-param>
tag no exemplo anterior.
<xsl:template match="system"> <xsl:param name="host"/> <inside> <xsl:value-of select="$host"/> </inside> </xsl:template>
Exemplo: parâmetros e modelos nomeados
O modelo report-changed
indicado a seguir declara dois parâmetros: dot
, que é padrão para o nó atual e changed
, que é padrão para o changed
atributo do nó dot
.
<xsl:template name="report-changed"> <xsl:param name="dot" select="."/> <xsl:param name="changed" select="$dot/@changed"/> <!-- ... --> </xsl:template>
A próxima estrofe chama o report-changed
modelo e define uma fonte para o changed
atributo diferente da fonte padrão definida no report-changed
modelo. Quando o report-changed
modelo for invocado, ele usará a fonte recém-definida para o changed
atributo no lugar da fonte padrão.
<xsl:template match="system"> <xsl:call-template name="report-changed"> <xsl:with-param name="changed" select="../@changed"/> </xsl:call-template> </xsl:template>
Da mesma forma, a chamada de modelo pode incluir o dot
parâmetro e definir uma fonte diferente do nó atual padrão, como mostrado aqui:
<xsl:template match="system"> <xsl:call-template name="report-changed"> <xsl:with-param name="dot" select="../../> </xsl:call-template> </xsl:template>
Exemplos adicionais
Para obter exemplos completos que usam o <xsl:param>
elemento em scripts de automação, veja o seguinte: