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で導入されたステートメント。