XSLT 매개 변수 개요
매개 변수는 명명된 템플릿 또는 명명되지 않은 템플릿에 전달될 수 있습니다. 템플릿 내에서 매개 변수를 선언한 다음 이름 앞에 달러 기호($)를 붙여 참조할 수 있습니다.
매개 변수 선언
매개 변수의 범위는 전역 또는 지역일 수 있습니다. 스크립트 초기화 시 Junos OS에 의해 값이 설정되는 매개 변수는 전역 매개 변수로 정의해야 합니다. 전역 매개 변수 선언은 스타일시트 선언 바로 뒤에 배치됩니다. 스크립트는 전역 매개 변수에 기본값을 할당할 수 있으며, 이는 Junos OS가 매개 변수에 값을 제공하지 않는 경우에 사용됩니다.
<?xml version="1.0" standalone="yes"?>
<xsl stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:junos="http://xml.juniper.net/junos/*/junos"
xmlns:xnm="http://xml.juniper.net/xnm/1.1/xnm"
xmlns:jcs="http://xml.juniper.net/junos/commit-scripts/1.0"
xmlns:ext="http://xmlsoft.org/XSLT/namespace" version="1.0">
<!-- global parameter -->
<xsl:param name="interface1"/>
지역 매개 변수는 블록의 시작 부분에 선언되어야 하며 해당 범위는 선언된 블록으로 제한됩니다. 템플릿 내에서 tag와 attribute를 사용하여 매개 변수를 선언합니다 <xsl:param> name. 선택적으로, XPath 표현식을 select 포함할 수 있는 속성을 포함하여 각 매개변수에 대한 기본값을 선언하십시오. 매개 변수 없이 템플릿을 호출하면 기본 식이 계산되고 결과가 매개 변수에 할당됩니다. 템플릿에서 기본값을 정의하지 않으면 매개 변수는 기본적으로 빈 문자열로 설정됩니다.
다음과 같은 명명된 템플릿 print-host-name 은 매개 변수를 message 선언하고 기본값을 정의합니다.
<xsl:template name="print-host-name">
<xsl:param name="message"
select="concat('host-name: ', system/host-name)"/>
<xsl:value-of select="$message"/>
</xsl:template>
템플릿은 매개 변수 이름 앞에 달러 기호($)를 추가하여 매개 변수 값 message 에 액세스합니다.
매개 변수 전달
템플릿을 호출할 때 요소와 name 특성을 사용하여 템플릿에 인수를 <xsl:with-param> 전달합니다. 속성의 <xsl:with-param> name 값은 실제 템플릿에 정의된 매개 변수의 이름과 일치해야 합니다. 그렇지 않으면 매개 변수가 무시됩니다. 선택적으로, 템플릿에 전달하는 각 매개 변수에 대해 특성 또는 요소의 내용을 <xsl:with-param> 사용하여 select 값을 정의할 수 있습니다.
템플릿에서 사용되는 매개 변수 값은 템플릿이 호출되는 방식에 따라 달라집니다. 템플릿을 호출 print-host-name 하는 다음 세 가지 예는 가능한 호출 환경을 보여 줍니다.
템플릿을 호출하지만 특정 매개 변수에 <xsl:with-param> 대한 요소를 포함하지 않으면 템플릿에 정의된 기본 식이 평가되고 결과가 매개 변수에 할당됩니다. 템플릿에 해당 매개 변수에 대한 기본값이 없는 경우 매개 변수는 기본적으로 빈 문자열로 설정됩니다. 다음 예제에서는 명명된 템플릿을 print-host-name 호출하지만 호출에 매개 변수를 포함하지 않습니다. 이 경우 명명된 템플릿은 템플릿에 정의된 매개 변수의 message 기본값을 사용하거나 기본값이 없는 경우 빈 문자열을 print-host-name 사용합니다.
<xsl:template match="configuration"> <xsl:call-template name="print-host-name"/> </xsl:template>
템플릿을 호출하고 매개 변수를 포함하지만 호출 환경에서 매개 변수에 대한 값을 정의하지 않으면 스크립트는 매개 변수가 이전에 초기화된 경우 매개 변수의 현재 값을 전달하고, 매개 변수가 선언되지 않은 경우 오류를 생성합니다. 다음 예제에서는 명명된 템플릿을 print-host-name 호출하고 매개 변수를 전달 message 하지만 값은 포함하지 않습니다. 스크립트에서 선언 및 초기화되고 범위가 블록에 표시되는 경우 message 의 message 현재 값이 사용됩니다. 스크립트에서 선언되었지만 초기화되지 않은 경우 message 값은 message 빈 문자열이 됩니다. 이 선언되지 않은 경우 message 스크립트에서 오류가 발생합니다.
<xsl:template match="configuration"> <xsl:call-template name="print-host-name"> <xsl:with-param name="message"/> </xsl:call-template> </xsl:template>
템플릿을 호출하고, 매개 변수를 포함하고, 매개 변수에 대한 값을 정의하면 템플릿은 제공된 값을 사용합니다. 다음 예제에서는 매개 변수와 정의된 값을 사용하여 message 명명된 템플릿을 print-host-name 호출하므로 템플릿은 새 값을 사용합니다.
<xsl:template match="configuration">
<xsl:call-template name="print-host-name">
<xsl:with-param name="message"
select=concat"('Host-name passed in: ', system/host-name)"/>
</xsl:call-template>
</xsl:template>
예: 매개 변수 및 일치 템플릿
다음 템플리트는 XML 문서의 루트인 에서 /일치합니다. 그런 다음 출력 문서에 추가되는 라는 요소를 <outside>생성하고 Junos OS 관리 프로세스(mgd)에 템플릿을 하위 트리에 재귀적으로 적용하도록 지시합니다configuration/system. 이 매개 변수는 host 일치하는 노드를 처리하는 데 사용됩니다. 매개변수의 host 값은 구성 계층의 [edit system] 수준에 있는 문의 값 host-name 입니다.
<xsl:template match="/"> <outside> <xsl:apply-templates select="configuration/system"> <xsl:with-param name="host" select="configuration/system/host-name"/> </xsl:apply-templates> </outside> </xsl:template>
다음 템플릿은 <system> 이전 예제에서 선택한 하위 트리의 맨 위에 있는 요소와 일치합니다. host 매개 변수는 기본값 없이 선언됩니다. <inside> 이전 예제의 태그에 <xsl:with-param> 정의된 매개 변수의 host 값을 포함하는 요소가 생성됩니다.
<xsl:template match="system"> <xsl:param name="host"/> <inside> <xsl:value-of select="$host"/> </inside> </xsl:template>
예제: 매개 변수 및 명명된 템플릿
다음과 같은 명명된 템플릿 report-changed 은 두 개의 매개 변수를 선언합니다. 기본값은 dot현재 노드로 설정되고changed, 은 기본적으로 노드dot의 속성으로 설정됩니다changed.
<xsl:template name="report-changed"> <xsl:param name="dot" select="."/> <xsl:param name="changed" select="$dot/@changed"/> <!-- ... --> </xsl:template>
다음 스탠자는 템플리트를 report-changed 호출하고 템플리트에 report-changed 정의된 기본 소스와 다른 속성의 changed 소스를 정의합니다. 템플릿이 report-changed 호출되면 기본 소스 대신 특성에 changed 대해 새로 정의된 소스를 사용합니다.
<xsl:template match="system"> <xsl:call-template name="report-changed"> <xsl:with-param name="changed" select="../@changed"/> </xsl:call-template> </xsl:template>
마찬가지로, 템플릿 호출은 매개 변수를 포함 dot 하고 다음과 같이 기본 현재 노드가 아닌 다른 소스를 정의할 수 있습니다.
<xsl:template match="system"> <xsl:call-template name="report-changed"> <xsl:with-param name="dot" select="../../> </xsl:call-template> </xsl:template>
추가 예제
자동화 스크립트에서 <xsl:param> 요소를 사용하는 전체 예제는 다음을 참조하십시오.