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:for-each> 프로그래밍 명령

요소는 <xsl:for-each> XSLT 프로세서에 일련의 노드를 함께 수집하고 하나씩 처리하도록 지시합니다. 노드는 속성에 의해 지정된 XPath 표현식에 select 의해 선택됩니다. 그런 다음 각 노드는 구조에 보관 <xsl:for-each> 된 지침에 따라 처리됩니다.

명령 내의 <xsl:for-each> 코드는 XPath 표현식과 일치하는 각 노드에 대해 재귀적으로 평가됩니다. 즉, 현재 컨텍스트는 절에서 선택한 <xsl:for-each> 각 노드로 이동되며 처리는 현재 컨텍스트와 상대적입니다.

다음 예시에서 구조는 <xsl:for-each> 계층의 각 노드를 [system syslog file] 재귀적으로 처리합니다. 각 일치하는 노드에 현재 컨텍스트를 업데이트하고 현재 컨텍스트의 하위 요소인 요소 값을 name 인쇄합니다.

<xsl:if> 프로그래밍 명령

<xsl:if> 프로그래밍 명령은 속성에 있는 test XPath 표현식이 을(를) 평가하면 명령이 처리되도록 하는 조건부 구조입니다true.

해당하는 다른 조항은 없습니다.

XSLT 프로그래밍 지침 및 의사 코드 샘플

표 1 에는 의사 코드 설명과 함께 여러 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>

host-name 문이 계층 수준에 포함 [edit system] 되면 호스트 이름을 으로 변경합니다M320.

그렇지 않으면 다음과 같은 경고 메시지를 Missing [edit system host-name] M320발행합니다.

<xsl:for-each select="interfaces/
interface[starts-with(name, 'ge-')]/unit">

계층 수준에서 구성된 [edit interfaces ge-fpc/pic/port unit logical-unit-number] 각 기가비트 이더넷 인터페이스에 대해.

<xsl:for-each select="data[not(value)]/name">

매개 변수 값을 포함하지 않는 매크로 매개변수를 선택합니다.

즉, 다음 형식의 모든 apply-macro 문을 일치시킬 수 있습니다.

apply-macro apply-macro-name {
    parameter-name;
}

양식의 모든 apply-macro 문을 무시합니다.

apply-macro apply-macro-name {
    parameter-name parameter-value;
}
<xsl:if test="not(system/host-name)">

host-name 문이 계층 수준에 포함되지 [edit system] 않은 경우.

<xsl:if test="apply-macro[name = 'no-igp']

apply-macro 라는 명령 no-igp 문이 현재 계층 수준에 포함되어 있는 경우.

<xsl:if test="not(../apply-macro[name = 'no-ldp'])

apply-macro 이름이 no-ldp 있는 문이 현재 계층 수준보다 두 개의 계층 수준을 포함하지 않은 경우.