2009-05-06 2 views
17

선택적 매개 변수를 사용하여 XSL 템플릿을 호출하는 방법이 있습니까? 예를 들어XSL 템플릿을 호출 할 때 선택적 매개 변수

:

<xsl:call-template name="test"> 
    <xsl:with-param name="foo" select="'fooValue'" /> 
    <xsl:with-param name="bar" select="'barValue'" /> 
</xsl:call-template> 

을 그리고 결과 템플릿 정의 :

<xsl:template name="foo"> 
    <xsl:param name="foo" select="$foo" /> 
    <xsl:param name="bar" select="$bar" /> 
    <xsl:param name="baz" select="$baz" /> 
    ...possibly more params... 
</xsl:template> 

이 코드의 뜻이 나에게 오류를 제공 "표현 오류 :. 변수 '바즈'을 (를) 찾을 수 없습니다" "baz"선언을 생략 할 수 있습니까?

당신은 잘못 xsl:param 구문을 사용하고, 헨리

답변

40

을 주셔서 감사합니다.

대신이 작업을 수행 :

<xsl:template name="foo"> 
    <xsl:param name="foo" /> 
    <xsl:param name="bar" /> 
    <xsl:param name="baz" select="DEFAULT_VALUE" /> 
    ...possibly more params... 
</xsl:template> 

파람은 xsl:param 문의 이름과 일치하는 xsl:with-param를 사용하여 전달 된 매개 변수의 값을합니다. 아무 것도 제공되지 않으면 select 속성의 값을 XPath 전체로 가져옵니다.

자세한 내용은 W3School's entry on param에서 확인할 수 있습니다.

+0

...... 감사합니다 !!!! – HumanSky

+0

+1. param의 w3schools 페이지 링크에 감사드립니다. – GuruM

+0

나는 이것이 오래되었음을 알고 있지만, w3schools 링크는 죽었다. – akousmata

2

매개 변수를 전달하지 않으면 param 요소의 선택 부분에있는 값이 사용됩니다.

변수 또는 매개 변수 $ baz가 아직 존재하지 않으므로 오류가 발생합니다. 그것은 예제에서 작동하기 위해 최상위 레벨에서 정의되어야합니다. 이는 어쨌든 당신이 원했던 것이 아닙니다.

또한 리터럴 값을 템플릿에 전달하는 경우 이와 같이 전달해야합니다.

<xsl:call-template name="test"> 
    <xsl:with-param name="foo"> 
     <xsl:text>fooValue</xsl:text> 
    </xsl:with-param> 

를 내가 검색을 수행하기 위해 내 XSL에서 XPath를 사용할 수 있도록 나는 텍스트로 명시 적으로 사용하여 좋아 :

<xsl:call-template name="test"> 
    <xsl:with-param name="foo">fooValue</xsl:with-param> 
3

개인적으로, 나는 다음과 같은 일을 선호합니다. XSL에 대한 분석을 할 때 여러 번 쓸 수있었습니다. 쓰지도 않았거나 기억하지도 않았습니다.

1

가독성을 높이기 위해 필요하지 않으면 <xsl:param .../>을 사용하지 마십시오.

이 위대한 작품 : 속임수를 썼는지

<xsl:template name="inner"> 
    <xsl:value-of select="$message" /> 
</xsl:template> 

<xsl:template name="outer"> 
    <xsl:call-template name="inner"> 
    <xsl:with-param name="message" select="'Welcome'" /> 
    </xsl:call-template> 
</xsl:template> 
관련 문제