Übersicht über SLAX-Anweisungen
Dieser Abschnitt listet einige häufig verwendete SLAX-Anweisungen mit kurzen Beispielen und XSLT-Entsprechungen auf.
for-each-Anweisung
Die SLAX-Anweisung for-each
funktioniert wie das <xsl:for-each>
Element. Die Anweisung besteht aus dem for-each
Schlüsselwort, einem durch Klammern getrennten Ausdruck und einem durch geschweifte Klammern getrennten Block. Die for-each
Anweisung weist den Prozessor an, eine Reihe von Knoten zusammenzustellen und nacheinander zu verarbeiten. Die Nodes werden anhand des angegebenen XPath-Ausdrucks ausgewählt. Jeder der Knoten wird dann gemäß den im Codeblock enthaltenen for-each
Anweisungen verarbeitet.
for-each (xpath-expression) { ... }
Der Code innerhalb der for-each
Anweisung wird rekursiv für jeden Node ausgewertet, der mit dem XPath-Ausdruck übereinstimmt. Das heißt, der aktuelle Kontext wird auf jeden Knoten verschoben, der von der for-each
Klausel ausgewählt wird, und die Verarbeitung erfolgt relativ zu diesem aktuellen Kontext.
Im folgenden Beispiel speichert die Variable inventory
die Inventarhierarchie. Die for-each
Anweisung verarbeitet rekursiv jeden chassis-sub-module
Knoten, der ein untergeordnetes Element des chassis-module
Knotens ist chassis
. Für jedes chassis-sub-module
Element, das ein mit einem part-number
Wert enthält, der der angegebenen Teilenummer entspricht, wird ein message
Element erstellt, das den Namen des Chassismoduls sowie den Namen und die Beschreibung des Chassis-Submoduls enthält.
for-each ($inventory/chassis/chassis-module/ chassis-sub-module[part-number == '750-000610']) { <message> "Down rev PIC in " _ ../name _ ", " _ name _ ": " _ description; }
Das XSLT-Äquivalent lautet:
<xsl:for-each select="$inventory/chassis/chassis-module/ chassis-sub-module[part-number = '750-000610']"> <message> <xsl:value-of select="concat('Down rev PIC in ', ../name, ', ', name, ': ', description)"/> </message> </xsl:for-each>
if, else if und else Anweisungen
SLAX unterstützt if
, else if
und , und else
Anweisungen. Die if
Anweisung ist ein bedingtes Konstrukt, das bewirkt, dass Anweisungen verarbeitet werden, wenn der angegebene XPath-Ausdruck als wahr ausgewertet wird. Dem if
Konstrukt können eine oder mehrere Klauseln zugeordnet else if
sein, von denen jede einen XPath-Ausdruck testet. Wenn der Ausdruck in der if
Anweisung als false ausgewertet wird, überprüft der Prozessor jeden else if
Ausdruck. Wenn eine Anweisung als true ausgewertet wird, führt das Skript die Anweisungen im zugehörigen Block aus und ignoriert alle nachfolgenden else if
and-Anweisungen else
. Die optionale else
Klausel ist der Standardcode, der ausgeführt wird, wenn alle zugeordneten if
Ausdrücke und else-if
Ausdrücke als false ausgewertet werden. Wenn alle if
and-Anweisungen else if
als false ausgewertet werden und die else
Anweisung nicht vorhanden ist, wird keine Aktion ausgeführt.
Bei den Ausdrücken, die in Klammern angezeigt werden, handelt es sich um erweiterte XPath-Ausdrücke, die das doppelte Gleichheitszeichen (==
) anstelle des einfachen XPath-Gleichheitszeichens ()=
unterstützen.
if (expression) { /* If block Statement */ } else if (expression) { /* else if block statement */ } else { /* else block statement */ }
Während der Skriptverarbeitung wird eine if
Anweisung, der keine OR-Anweisung else
zugeordnet else if
ist, in ein <xsl:if>
Element umgewandelt. Wenn eine der else if
oder-Klauseln else
vorhanden ist, werden die Anweisung und die if
zugehörigen else if
und-Blöcke else
in ein <xsl:choose>
Element umgewandelt.
if (starts-with(name, "fe-")) { if (mtu < 1500) { /* Select Fast Ethernet interfaces with low MTUs */ } } else { if (mtu > 8096) { /* Select non-Fast Ethernet interfaces with high MTUs */ } }
Das XSLT-Äquivalent lautet:
<xsl:choose> <xsl:when test="starts-with(name, 'fe-')"> <xsl:if test="mtu < 1500"> <!-- Select Fast Ethernet interfaces with low MTUs --> </xsl:if> </xsl:when> <xsl:otherwise> <xsl:if test="mtu > 8096"> <!-- Select non-Fast Ethernet interfaces with high MTUs --> </xsl:if> </xsl:otherwise> </xsl:choose>
match-Statement
Mit der match
Anweisung geben Sie grundlegende Übereinstimmungsvorlagen an, gefolgt von einem Ausdruck, der angibt, wann die Vorlage zulässig sein soll, und einem Block von Anweisungen, die in geschweifte Klammern eingeschlossen sind.
match configuration { <xnm:error> { <message> "..."; } }
Das XSLT-Äquivalent lautet:
<xsl:template match="configuration"> <xnm:error> <message> ...</message> </xnm:error> </xsl:template>
Weitere Informationen zum Erstellen von Übereinstimmungsvorlagen finden Sie unter Übersicht über SLAX-Vorlagen.
ns-Statement
Sie geben Namespacedefinitionen mit der SLAX-Anweisung ns
an. Diese besteht aus dem ns
Schlüsselwort, einer Präfixzeichenfolge, einem Gleichheitszeichen und einem Namespace-URI (Uniform Resource Identifier ). Um den Standardnamespace zu definieren, verwenden Sie nur das ns
Schlüsselwort und einen Namespace-URI.
ns junos = "https://www.juniper.net/junos/";
Die ns
Anweisung kann nach der version
Anweisung am Anfang des Stylesheets oder am Anfang eines beliebigen Blocks stehen.
ns a = "http://example.com/1"; ns "http://example.com/global"; ns b = "http://example.com/2"; match / { ns c = "http://example.com/3"; <top> { ns a = "http://example.com/4"; apply-templates commit-script-input/configuration; } }
Wenn die Anweisung am Anfang des Stylesheets steht, kann sie ns
entweder das exclude
Schlüsselwort or extension
enthalten. Das Schlüsselwort weist den Parser an, dem exclude-result-prefixes
extension-element-prefixes
or-Attribut das Namespacepräfix hinzuzufügen.
ns exclude foo = "http://example.com/foo"; ns extension jcs = "http://xml.juniper.net/jcs";
Das XSLT-Äquivalent lautet:
<xsl:stylesheet xmlns:foo="http://example.com/foo" xmlns:jcs="http://xml.juniper.net/jcs" exclude-result-prefixes="foo" extension-element-prefixes="jcs"> <!-- ... --> </xsl:stylesheet>
version-Anweisung
Alle SLAX-Stylesheets müssen mit einer version
Anweisung beginnen, die die Versionsnummer für die SLAX-Sprache angibt. Zu den unterstützten Versionen gehören 1.0, 1.1 und 1.2.
version 1.2;