Visão geral das instruções de programação XSLT
O XSLT tem várias instruções de programação tradicionais. Sua forma tende a ser verbosa, porque sua sintaxe é construída a partir de elementos XML.
As instruções de programação XSLT mais comumente usadas em scripts commit, op, event e SNMP, que fornecem controle de fluxo dentro de um script, são descritas nas seguintes seções:
<xsl:escolha> Instrução de programação
A <xsl:choose>
instrução é uma construção condicional que faz com que diferentes instruções sejam processadas em circunstâncias diferentes. É semelhante a uma declaração de switch em linguagens de programação tradicionais. A <xsl:choose>
instrução contém um ou mais <xsl:when>
elementos, cada um dos quais testa uma expressão XPath . Se o teste avaliar a verdade, o processador XSLT executará as instruções do <xsl:when>
elemento. Após o processador XSLT encontrar uma expressão XPath em um <xsl:when>
elemento que avalia a verdade, o processador XSLT ignora todos os elementos subseqüentes <xsl:when>
contidos na <xsl:choose>
instrução, mesmo que suas expressões XPath avaliem a verdade. Em outras palavras, o processador XSLT processa apenas as instruções contidas no primeiro <xsl:when>
elemento cujo test
atributo avalia ser verdadeiro. Se nenhum dos <xsl:when>
atributos dos test
elementos avaliar a verdade, o conteúdo do elemento opcional <xsl:otherwise>
, se um estiver presente, for processado.
A <xsl:choose>
instrução é semelhante a uma declaração de switch em outras linguagens de programação. O <xsl:when>
elemento é o "caso" da declaração do switch, e você pode adicionar qualquer número de <xsl:when>
elementos. O <xsl:otherwise>
elemento é o "padrão" da declaração do switch.
<xsl:choose> <xsl:when test="xpath-expression"> ... </xsl:when> <xsl:when test="another-xpath-expression"> ... </xsl:when> <xsl:otherwise> ... </xsl:otherwise> </xsl:choose>
<xsl:para cada> Instrução de programação
O <xsl:for-each>
elemento diz ao processador XSLT para reunir um conjunto de nós e processá-los um a um. Os nós são selecionados pela expressão XPath especificada pelo select
atributo. Cada um dos nós é então processado de acordo com as instruções mantidas na construção <xsl:for-each>
.
<xsl:for-each select="xpath-expression"> ... </xsl:for-each>
O código dentro da <xsl:for-each>
instrução é avaliado recursivamente para cada nó que corresponda à expressão XPath. Ou seja, o contexto atual é movido para cada nó selecionado pela cláusula, e o <xsl:for-each>
processamento é relativo a esse contexto atual.
No exemplo a seguir, a construção <xsl:for-each>
processa recursivamente cada nó na [system syslog file]
hierarquia. Ele atualiza o contexto atual para cada nó correspondente e imprime o valor do name
elemento, se houver, que é uma criança do contexto atual.
<xsl:for-each select="system/syslog/file"> <xsl:value-of select=”name”/> </xsl:for-each>
<xsl:if> Instrução de programação
Uma <xsl:if>
instrução de programação é uma construção condicional que faz com que as instruções sejam processadas se a expressão XPath mantida no test
atributo avaliar a true
.
<xsl:if test="xpath-expression"> ...executed if test expression evaluates to true </xsl:if>
Não há outra cláusula correspondente.
Exemplo de instruções de programação XSLT e Pseudocode
A Tabela 1 apresenta exemplos que usam várias instruções de programação XSLT, juntamente com explicações pseudocódigo.
Instrução de programação |
Explicação pseudocódigo |
---|---|
<xsl:choose> <xsl:when test="system/host-name"> <change> <system> <host-name>M320</host-name> </system> </change> </xsl:when> <xsl:otherwise> <xnm:error> <message> Missing [edit system host-name] M320. </message> </xnm:error> </xsl:otherwise> </xsl:choose> |
Quando a Caso contrário, emita a mensagem de aviso: |
<xsl:for-each select="interfaces/ interface[starts-with(name, 'ge-')]/unit"> |
Para cada interface Ethernet Gigabit configurada no nível de |
<xsl:for-each select="data[not(value)]/name"> |
Selecione qualquer parâmetro macro que não contenha um valor de parâmetro. Em outras palavras, corresponda a todas as apply-macro apply-macro-name { parameter-name; } E ignore todas as apply-macro apply-macro-name { parameter-name parameter-value; } |
<xsl:if test="not(system/host-name)"> |
Se a |
<xsl:if test="apply-macro[name = 'no-igp'] |
Se a |
<xsl:if test="not(../apply-macro[name = 'no-ldp']) |
Se a |