Help us improve your experience.

Let us know what you think.

Do you have time for a two-minute survey?

 
 

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:各プログラム用>プログラミングインストラクション

要素は <xsl:for-each> 、XSLT プロセッサにノードのセットを集め、それらを 1 つずつ処理するように指示します。ノードは属性で指定されたXPath式によって select 選択されます。各ノードは、構成で <xsl:for-each> 保持されているインストラクションに従って処理されます。

命令内の <xsl:for-each> コードは、XPath 式に一致する各ノードに対して再帰的に評価されます。つまり、現在のコンテキストは、 句によって <xsl:for-each> 選択された各ノードに移動され、処理はその現在のコンテキストに対して相対的です。

次の例では、構造は階層内の <xsl:for-each> 各ノードを [system syslog file] 再帰的に処理します。一致する各ノードに現在のコンテキストを更新し、現在のコンテキストの name 子である要素の値(存在する場合)を印刷します。

<xsl:if> プログラミング命令

<xsl:if>プログラミング命令は、属性で保持されている XPath 式が に評価された場合に命令をtest処理するtrue条件付き構造です。

対応する else 節はありません。

XSLT プログラミング命令と疑似コードのサンプル

表 1 は、複数の 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>

ステートメントが host-name 階層レベルに [edit system] 含まれている場合、ホスト名を に M320変更します。

それ以外の場合は、警告メッセージを発行します。 Missing [edit system host-name] M320

<xsl:for-each select="interfaces/
interface[starts-with(name, 'ge-')]/unit">

階層レベルで設定された各ギガビット イーサネット インターフェイスに対して [edit interfaces ge-fpc/pic/port unit logical-unit-number]

<xsl:for-each select="data[not(value)]/name">

パラメーター値を含まないマクロ パラメーターを選択します。

言い換えると、以下の形式のすべての apply-macro ステートメントに一致します。

apply-macro apply-macro-name {
    parameter-name;
}

そして、フォームのすべての apply-macro ステートメントを無視します。

apply-macro apply-macro-name {
    parameter-name parameter-value;
}
<xsl:if test="not(system/host-name)">

ステートメントが host-name 階層レベルに [edit system] 含まれていない場合。

<xsl:if test="apply-macro[name = 'no-igp']

という名前no-igpapply-macroステートメントが現在の階層レベルに含まれている場合。

<xsl:if test="not(../apply-macro[name = 'no-ldp'])

名前no-ldpapply-macro持つステートメントが、現在の階層レベルより上の 2 つの階層レベルを含まない場合。