key
구문
key name { match pattern; value expression; }
설명
XPath 기능에 사용할 key()
키를 정의합니다. 키는 ID의 대안이며 XML 문서 내에서 노드를 인덱싱하는 데 사용됩니다. 키는 스크립트에서 최상위 문으로 정의되어야 합니다. 정의는 key
키 식별자, 인덱스를 위한 노드 및 일치하는 노드를 참조하기 위해 키 이름과 쌍으로 구성된 값으로 구성됩니다. 그런 다음 이 key()
함수는 적절한 노드를 찾는 데 사용됩니다.
이 key()
기능은 현재 노드의 XML 문서와 함께 작동하고 지정된 key
정의를 사용하여 특정 이름과 값으로 참조되는 노드를 검색합니다. 기능 인수는 키 이름과 원하는 키의 값입니다. 반환 값은 키 이름과 값으로 참조되는 모든 노드를 포함하는 노드 세트입니다. 원하는 키 값이 문자열이 아닌 노드 세트로 제공되는 경우, 반환된 노드 집합은 노드 세트 내의 노드에 의해 표현되는 키 값에 대해 참조된 모든 노드의 연합입니다.
예를 들어, 키를 정의하는 경우:
key func { match prototype; value @name; }
다음 코드는 "trace"의 값이 있는 name
속성을 가진 요소를 선택한 <prototype>
다음 하위 요소<return-type>
의 값을 출력합니다.
for-each ( key("func", "trace") ) { <out> return-type/.; }
특성
key name |
스크립트 내에서 키를 고유하게 식별하고 기능에 대한 첫 번째 인수 |
match pattern |
인덱스에 대한 노드 집합을 선택하는 XPath 표현식. |
value expression |
키의 값을 정의하는 XPath 표현식. |
SLAX 예
다음 op 스크립트는 디바이스에서 ge-0/0/0.0의 다음 홉으로 모든 정적 경로와 모든 경로를 검색하고 표시하는 데 사용되는 두 개의 key
정의를 protocol
next-hop
생성합니다. 스크립트는 Junos XML API get-route-information
명령을 호출하여 디바이스의 경로 정보를 획득합니다. 명령문은 for-each( $results )
현재 노드를 XML 문서로 $results
변경합니다. 후속 for-each
루프는 키를 사용하여 키 이름과 값에 따라 인덱싱되는 모든 노드를 검색합니다.
문은 for-each( key( "protocol", "Static" )
요소와 protocol
route-table/rt
일치하는 키 정의를 사용하여 원하는 노드를 검색합니다. 키 값은 rt-entry/protocol-name
"Static"이라는 값을 가지는 하위 요소와 일치 <protocol-name>
합니다. 코드 블록은 컨텍스트 노드로 사용하여 <rt>
실행됩니다. 각 일치에 대해 스크립트는 요소의 <rt-destination>
값을 출력합니다.
문은 for-each( key( "next-hop", "ge-0/0/0.0" )
요소에서 route-table/rt
일치하는 "다음 홉" 키 정의를 사용하여 원하는 노드를 검색합니다. 키 값은 rt-entry/nh/via
"ge-0/0/0.0"이라는 값을 가지는 하위 요소와 일치 <via>
합니다. 코드 블록은 컨텍스트 노드로 사용하여 <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; } } } }
릴리스 정보
SLAX 언어의 버전 1.1에서 소개된 명령문은 Junos OS 릴리스 12.2 이상에서 지원됩니다.