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"/>
로컬 매개 변수는 블록의 시작 부분에 선언되어야 하며 해당 범위는 선언된 블록으로 제한됩니다. 템플릿 안에서는 태그와 name
속성을 사용하여 매개 변수를 <xsl:param>
선언합니다. 선택적으로 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
을 호출하지만 호출에 매개 변수는 포함하지 않습니다. 이 경우, 명명된 템플릿은 템플릿에 print-host-name
정의된 매개 변수의 message
기본값을 사용하거나 기본값이 존재하지 않는 경우 빈 문자열을 사용합니다.
<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
값은 구성 계층의 host-name
[edit system
] 수준에서 명령문의 값입니다.
<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>
요소가 생성되며, 이는 이전 예제의 host
태그에 <xsl:with-param>
정의된 매개변수 값을 포함합니다.
<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>
다음 stanza는 템플릿을 report-changed
호출하고 템플릿에 changed
정의된 report-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>