이 페이지 내용
SLAX 문 개요
이 섹션에는 일반적으로 사용되는 몇 가지 SLAX 명령문과 간단한 예제 및 이에 상응하는 XSLT 명령문이 나열되어 있습니다.
for-each 문
SLAX for-each
문은 요소와 같은 <xsl:for-each>
기능을 합니다. 문은 키워드, 괄호로 구분된 표현식 및 중괄호로 구분된 블록으로 구성됩니다 for-each
. 명령문은 for-each
프로세서에 노드 세트를 함께 수집하여 하나씩 처리하도록 지시합니다. 노드는 지정된 XPath 표현식에 의해 선택됩니다. 그런 다음 각 노드는 코드 블록에 있는 지침에 따라 처리됩니다 for-each
.
for-each (xpath-expression) { ... }
명령 내의 for-each
코드는 XPath 식과 일치하는 각 노드에 대해 재귀적으로 평가됩니다. 즉, 현재 컨텍스트는 절에 for-each
의해 선택된 각 노드로 이동되고 처리는 해당 현재 컨텍스트를 기준으로 합니다.
다음 예 inventory
에서 변수는 인벤토리 계층을 저장합니다. 명령문은 for-each
노드의 자식 chassis-module
chassis
인 각 chassis-sub-module
노드를 재귀적으로 처리합니다. 지정된 부품 번호와 동일한 값을 가진 을part-number
(를) 포함하는 각 chassis-sub-module
요소에 대해, message
섀시 모듈의 이름과 섀시 하위 모듈의 이름 및 설명을 포함하는 요소가 생성됩니다.
for-each ($inventory/chassis/chassis-module/ chassis-sub-module[part-number == '750-000610']) { <message> "Down rev PIC in " _ ../name _ ", " _ name _ ": " _ description; }
XSLT에 해당하는 것은 다음과 같습니다.
<xsl:for-each select="$inventory/chassis/chassis-module/ chassis-sub-module[part-number = '750-000610']"> <message> <xsl:value-of select="concat('Down rev PIC in ', ../name, ', ', name, ': ', description)"/> </message> </xsl:for-each>
if, else if 및 else 문
SLAX는 , else if
, else
문을 지원합니다if
. 문은 if
지정된 XPath 식이 true로 평가되는 경우 명령이 처리되도록 하는 조건부 구문입니다. 구문에는 if
하나 이상의 연관 else if
된 절이 있을 수 있으며, 각 절은 XPath 식을 테스트합니다. 문의 식이 if
false로 평가되면 프로세서는 각 else if
식을 확인합니다. 문이 true로 평가되면 스크립트는 연결된 블록의 명령을 실행하고 모든 후속 else if
및 else
문을 무시합니다. 선택적 else
절은 연결된 if
모든 및 else-if
식이 false로 평가되는 경우 실행되는 기본 코드입니다. 및 else if
문이 모두 if
false로 평가되고 else
문이 없으면 아무 작업도 수행되지 않습니다.
괄호 안에 표시되는 표현식은 XPath의 단일 등호(=
) 대신 이중 등호(==
)를 지원하는 확장 XPath 표현식입니다.
if (expression) { /* If block Statement */ } else if (expression) { /* else if block statement */ } else { /* else block statement */ }
스크립트 처리 if
중에 연관 else if
된 또는 else
명령문이 없는 명령문은 요소로 <xsl:if>
변환됩니다. 또는 else
절이 else if
있는 경우 문 및 연관된 else if
if
및 else
블록이 요소로 <xsl:choose>
변환됩니다.
if (starts-with(name, "fe-")) { if (mtu < 1500) { /* Select Fast Ethernet interfaces with low MTUs */ } } else { if (mtu > 8096) { /* Select non-Fast Ethernet interfaces with high MTUs */ } }
XSLT에 해당하는 것은 다음과 같습니다.
<xsl:choose> <xsl:when test="starts-with(name, 'fe-')"> <xsl:if test="mtu < 1500"> <!-- Select Fast Ethernet interfaces with low MTUs --> </xsl:if> </xsl:when> <xsl:otherwise> <xsl:if test="mtu > 8096"> <!-- Select non-Fast Ethernet interfaces with high MTUs --> </xsl:if> </xsl:otherwise> </xsl:choose>
match 문
문을 사용하여 match
기본 일치 템플릿을 지정하고, 그 뒤에 템플릿이 허용되어야 하는 시기를 지정하는 표현식과 중괄호 집합으로 둘러싸인 문 블록을 지정합니다.
match configuration { <xnm:error> { <message> "..."; } }
XSLT에 해당하는 것은 다음과 같습니다.
<xsl:template match="configuration"> <xnm:error> <message> ...</message> </xnm:error> </xsl:template>
일치 템플릿 구성에 대한 자세한 내용은 SLAX 템플릿 개요를 참조하십시오.
ns 문
SLAX ns
문을 사용하여 네임스페이스 정의를 지정합니다. 이는 키워드, 접두사 문자열, 등호 및 네임스페이스 URI(Uniform Resource Identifier)로 구성됩니다ns
. 기본 네임스페이스를 정의하려면 키워드와 네임스페이스 URI만 ns
사용합니다.
ns junos = "https://www.juniper.net/junos/";
문은 ns
스타일시트의 시작 부분이나 블록의 version
시작 부분에 있는 문 뒤에 나타날 수 있습니다.
ns a = "http://example.com/1"; ns "http://example.com/global"; ns b = "http://example.com/2"; match / { ns c = "http://example.com/3"; <top> { ns a = "http://example.com/4"; apply-templates commit-script-input/configuration; } }
스타일시트의 시작 부분에 표시되는 경우 문에는 ns
또는 extension
키워드가 exclude
포함될 수 있습니다. 키워드는 구문 분석기에게 네임스페이스 접두부를 또는 extension-element-prefixes
속성에 추가하도록 지시합니다exclude-result-prefixes
.
ns exclude foo = "http://example.com/foo"; ns extension jcs = "http://xml.juniper.net/jcs";
XSLT에 해당하는 것은 다음과 같습니다.
<xsl:stylesheet xmlns:foo="http://example.com/foo" xmlns:jcs="http://xml.juniper.net/jcs" exclude-result-prefixes="foo" extension-element-prefixes="jcs"> <!-- ... --> </xsl:stylesheet>
version 문
모든 SLAX 스타일시트는 SLAX 언어의 version
버전 번호를 지정하는 문으로 시작해야 합니다. 지원되는 버전에는 1.0, 1.1 및 1.2가 포함됩니다.
version 1.2;