key
構文
key name { match pattern; value expression; }
説明
XPath 関数で使用する key()
キーを定義します。キーは ID の代わりになり、XML ドキュメント内のノードにインデックスを付けるために使用されます。キーは、スクリプト内の最上位ステートメントとして定義する必要があります。定義は key
、キー識別子、インデックスを作成するノード、および一致するノードを参照するためのキー名とペアになっている値で構成されます。次に、 key()
この関数を使用して適切なノードを見つけます。
この key()
関数は、現在のノードの XML ドキュメントで動作し、指定された key
定義を使用して、特定の名前と値によって参照されるノードを取得します。関数の引数は、キー名と目的のキーの値です。戻り値は、そのキー名と値によって参照されるすべてのノードを含むノード セットです。目的のキー値が文字列ではなくノード セットとして提供されている場合、返されるノード セットは、ノード セット内のノードによって表されるキー値について、参照されているすべてのノードの和集合です。
たとえば、キーを定義するとします。
key func { match prototype; value @name; }
次のコードは、"trace" の値を持つ属性を持つ要素を選択し<prototype>
、子要素name
<return-type>
の値を出力します。
for-each ( key("func", "trace") ) { <out> return-type/.; }
属性
key name |
キー識別子は、スクリプト内でキーを一意に識別し、関数の最初の引数として渡されます |
match pattern |
インデックスを作成するノードのセットを選択する XPath 式。 |
value expression |
キーの値を定義する XPath 式。 |
SLAXの例
次の op スクリプトは、2 つのkey
定義 と を作成し、デバイス上のすべてのスタティック ルートとnext-hop
、protocol
ネクスト ホップが ge-0/0/0.0 のすべてのルートを取得して表示するために使用されます。スクリプトは、Junos XML APIget-route-information
コマンドを呼び出して、デバイスのルート情報を取得します。ステートメントはfor-each( $results )
、現在のノードを $results
XML ドキュメントに変更します。後続のfor-each
ループでは、キーを使用して、キー名と値に従ってインデックスが付けられたすべてのノードを取得します。
このステートメントはfor-each( key( "protocol", "Static" )
、要素でroute-table/rt
一致するキー定義を使用してprotocol
、目的のノードを取得します。rt-entry/protocol-name
キー値は、<protocol-name>
値 "Static" を持つ子要素と一致します。コード ブロックは、コンテキスト ノードとして使用して<rt>
実行されます。一致ごとに、スクリプトは要素の値を出力します<rt-destination>
。
ステートメントは for-each( key( "next-hop", "ge-0/0/0.0" )
、要素で route-table/rt
一致する「ネクストホップ」キー定義を使用して、目的のノードを取得します。 rt-entry/nh/via
キー値は、 <via>
値 "ge-0/0/0.0" を持つ子要素と一致します。コード ブロックは、コンテキスト ノードとして使用して <rt>
実行されます。一致ごとに、スクリプトは要素の値を出力します <rt-destination>
。
version 1.1; ns junos = "http://xml.juniper.net/junos/*/junos"; ns xnm = "http://xml.juniper.net/xnm/1.1/xnm"; ns jcs = "http://xml.juniper.net/junos/commit-scripts/1.0"; key protocol { match route-table/rt; value rt-entry/protocol-name; } key next-hop { match route-table/rt; value rt-entry/nh/via; } match / { <op-script-results> { var $results = jcs:invoke("get-route-information"); for-each( $results ) { /* Display all static routes */ <output> "Static routes: "; for-each( key( "protocol", "Static" ) ) { <output> rt-destination; } /* Display all routes with next-hop of ge-0/0/0.0 */ <output> "Next-hop ge-0/0/0.0: "; for-each( key( "next-hop", "ge-0/0/0.0" ) ) { <output> rt-destination; } } } }
リリース情報
Junos OSリリース12.2以降のリリースでサポートされているSLAX言語のバージョン1.1で導入されたステートメント。