XSLT プログラミング手順の概要
XSLT には、従来のプログラミング命令が多数あります。その構文は XML 要素から構築されているため、形式は詳細になりがちです。
コミット、op、イベント、およびスクリプト内のフロー制御を提供する SNMP スクリプトで最も一般的に使用される XSLT プログラミング手順については、以下のセクションで説明します。
<xsl:choose> Programming Instruction
命令<xsl:choose>
は、さまざまな状況で異なる命令を処理する条件付き構成要素です。これは、従来のプログラミング言語の switch ステートメントと似ています。命令には <xsl:choose>
1 つ以上<xsl:when>
の要素が含まれており、それぞれが XPath 式をテストします。テストが true と評価された場合、XSLT プロセッサは要素内の命令を<xsl:when>
実行します。XSLT プロセッサが true と評価される要素で XPath 式を<xsl:when>
検索すると、XPath 式が true と評価された場合でも、XSLT プロセッサは命令に<xsl:choose>
含まれる後続<xsl:when>
の要素をすべて無視します。言い換えると、XSLT プロセッサは、属性が true と評価される最初<xsl:when>
の要素test
に含まれる命令のみを処理します。要素の<xsl:when>
属性のいずれも true とtest
評価されない場合、オプション要素の内容(存在<xsl:otherwise>
する場合)が処理されます。
この <xsl:choose>
命令は、他のプログラミング言語の switch ステートメントと似ています。要素は <xsl:when>
switch ステートメントの「case」であり、任意の数の <xsl:when>
要素を追加できます。要素は <xsl:otherwise>
、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:各プログラム用>プログラミングインストラクション
要素は <xsl:for-each>
、XSLT プロセッサにノードのセットを集め、それらを 1 つずつ処理するように指示します。ノードは属性で指定されたXPath式によって select
選択されます。各ノードは、構成で <xsl:for-each>
保持されているインストラクションに従って処理されます。
<xsl:for-each select="xpath-expression"> ... </xsl:for-each>
命令内の <xsl:for-each>
コードは、XPath 式に一致する各ノードに対して再帰的に評価されます。つまり、現在のコンテキストは、 句によって <xsl:for-each>
選択された各ノードに移動され、処理はその現在のコンテキストに対して相対的です。
次の例では、構造は階層内の <xsl:for-each>
各ノードを [system syslog file]
再帰的に処理します。一致する各ノードに現在のコンテキストを更新し、現在のコンテキストの name
子である要素の値(存在する場合)を印刷します。
<xsl:for-each select="system/syslog/file"> <xsl:value-of select=”name”/> </xsl:for-each>
<xsl:if> プログラミング命令
<xsl:if>
プログラミング命令は、属性で保持されている XPath 式が に評価された場合に命令をtest
処理するtrue
条件付き構造です。
<xsl:if test="xpath-expression"> ...executed if test expression evaluates to true </xsl:if>
対応する else 節はありません。
XSLT プログラミング命令と疑似コードのサンプル
表 1 は、複数の XSLT プログラミング命令と疑似コードの説明を使用する例を示しています。
プログラミング手順 |
疑似コードの説明 |
---|---|
<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> |
ステートメントが それ以外の場合は、警告メッセージを発行します。 |
<xsl:for-each select="interfaces/ interface[starts-with(name, 'ge-')]/unit"> |
階層レベルで設定された各ギガビット イーサネット インターフェイスに対して |
<xsl:for-each select="data[not(value)]/name"> |
パラメーター値を含まないマクロ パラメーターを選択します。 言い換えると、以下の形式のすべての apply-macro apply-macro-name { parameter-name; } そして、フォームのすべての apply-macro apply-macro-name { parameter-name parameter-value; } |
<xsl:if test="not(system/host-name)"> |
ステートメントが |
<xsl:if test="apply-macro[name = 'no-igp'] |
という名前 |
<xsl:if test="not(../apply-macro[name = 'no-ldp']) |
名前 |