XSLT 프로그래밍 지침 개요
XSLT 에는 여러 가지 기존 프로그래밍 지침이 있습니다. 구문이 XML 요소에서 구축되기 때문에 형식이 정적인 경향이 있습니다.
스크립트 내에서 플로우 제어를 제공하는 커밋, op, 이벤트 및 SNMP 스크립트에서 가장 일반적으로 사용되는 XSLT 프로그래밍 지침은 다음 섹션에서 설명합니다.
<xsl:선택> 프로그래밍 명령
지침은 <xsl:choose>
다른 상황에서 다른 지침을 처리하도록 하는 조건부 구조입니다. 이는 기존 프로그래밍 언어의 스위치 명령문과 유사합니다. 지침에는 <xsl:choose>
하나 이상의 <xsl:when>
요소가 포함되어 있으며, 각 요소는 XPath 표현식을 테스트합니다. 테스트가 true로 평가되면 XSLT 프로세서는 요소에서 <xsl:when>
지침을 실행합니다. XSLT 프로세서가 true로 평가되는 요소에서 <xsl:when>
XPath 표현식을 찾은 후 XSLT 프로세서는 XPath 표현식이 true로 평가되더라도 지침에 <xsl:choose>
포함된 모든 후속 <xsl:when>
요소를 무시합니다. 즉, XSLT 프로세서는 속성이 true로 평가되는 첫 번째 <xsl:when>
요소 test
에 포함된 지침만 처리합니다. 요소의 test
속성 중 <xsl:when>
어느 것도 true로 평가되지 않으면, 선택 요소 <xsl:otherwise>
의 컨텐츠가 있는 경우 처리됩니다.
이 <xsl:choose>
명령문은 다른 프로그래밍 언어의 스위치 명령문과 유사합니다. 요소는 <xsl:when>
스위치 명령문의 "케이스"이며, 다양한 <xsl:when>
요소를 추가할 수 있습니다. 요소는 <xsl:otherwise>
스위치 명령문의 "기본값"입니다.
<xsl:choose> <xsl:when test="xpath-expression"> ... </xsl:when> <xsl:when test="another-xpath-expression"> ... </xsl:when> <xsl:otherwise> ... </xsl:otherwise> </xsl:choose>
<xsl:for-each> 프로그래밍 명령
요소는 <xsl:for-each>
XSLT 프로세서에 일련의 노드를 함께 수집하고 하나씩 처리하도록 지시합니다. 노드는 속성에 의해 지정된 XPath 표현식에 select
의해 선택됩니다. 그런 다음 각 노드는 구조에 보관 <xsl:for-each>
된 지침에 따라 처리됩니다.
<xsl:for-each select="xpath-expression"> ... </xsl:for-each>
명령 내의 <xsl:for-each>
코드는 XPath 표현식과 일치하는 각 노드에 대해 재귀적으로 평가됩니다. 즉, 현재 컨텍스트는 절에서 선택한 <xsl:for-each>
각 노드로 이동되며 처리는 현재 컨텍스트와 상대적입니다.
다음 예시에서 구조는 <xsl:for-each>
계층의 각 노드를 [system syslog file]
재귀적으로 처리합니다. 각 일치하는 노드에 현재 컨텍스트를 업데이트하고 현재 컨텍스트의 하위 요소인 요소 값을 name
인쇄합니다.
<xsl:for-each select="system/syslog/file"> <xsl:value-of select=”name”/> </xsl:for-each>
<xsl:if> 프로그래밍 명령
<xsl:if>
프로그래밍 명령은 속성에 있는 test
XPath 표현식이 을(를) 평가하면 명령이 처리되도록 하는 조건부 구조입니다true
.
<xsl:if test="xpath-expression"> ...executed if test expression evaluates to true </xsl:if>
해당하는 다른 조항은 없습니다.
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> |
그렇지 않으면 다음과 같은 경고 메시지를 |
<xsl:for-each select="interfaces/ interface[starts-with(name, 'ge-')]/unit"> |
계층 수준에서 구성된 |
<xsl:for-each select="data[not(value)]/name"> |
매개 변수 값을 포함하지 않는 매크로 매개변수를 선택합니다. 즉, 다음 형식의 모든 apply-macro apply-macro-name { parameter-name; } 양식의 모든 apply-macro apply-macro-name { parameter-name parameter-value; } |
<xsl:if test="not(system/host-name)"> |
|
<xsl:if test="apply-macro[name = 'no-igp'] |
|
<xsl:if test="not(../apply-macro[name = 'no-ldp']) |
|