2013-03-27 5 views
-2

템플릿에서 변수를 전송하고 값을 얻을 수 있다는 것을 알고 싶습니다. 예를 들어, 템플릿 A의 변수를 설정하고 템플릿 B의 값을 얻으시겠습니까? 콜 템플릿을 사용하려고하지만 가치가 없습니다.XSLT 2.0 템플릿간에 데이터 전송

<xsl:template name="Transf"> 
    <xsl:param name="T1"/> 
    <xsl:value-of select="$T1"/> 
</xsl:template> 

<xsl:template match='director/filmDirectors'> 
    <xsl:if test="filmDirector='Allen Woody'"> 
     <xsl:call-template name="Transf"> 
     <xsl:value-of select="@id"/><xsl:with-param name="T1" select="@id"/> 
     </xsl:call-template> 
    </xsl:if> 

</xsl:template> 

<xsl:template match='movie/titles'> 
<xsl:call-template name="Transf"> 
    <xsl:with-param name="T1"><xsl:value-of select="tile[@id=$T1]"/></xsl:with-param> 
</xsl:call-template> 
</xsl:template> 

XML 파일

<list> 
<director> 
    <filmDirectors> 
    <filmDirector id="steve-s"> 
    <lname>Spielberg</lname> 
    <lfirstname>Steven</lfirstname> 
    </filmDirector> 

    <filmDirector id="woody-a"> 
    <lname>Allen<lname> 
    <lfirstname>Woody</lfirstname> 
    </filmDirector> 
<filmDirectors> 
</director> 

<movie> 
<titles> 
    <title id="steve-s">Jurassic Park</title> 
</titles> 
<titles> 
    <title id="woody-a">Small Time Crooks</title> 
</titles> 
</movie> 

당신은 내게 조언을 줄 수 있습니까?

미리 답변 해 주셔서 감사합니다.

+0

주어진 템플릿이 컴파일되지 않습니다. 사용할 수 없습니다. if 문을 호출 템플릿 ... – Joep

+0

제공된 "xml"은 심각하게 형식이 잘못되었습니다. 질문을 수정하고 수정하십시오. –

답변

1

XML의 구조를 알지 못해도 해결책을 제시하기가 어렵지만 일반적으로 호출 템플릿 대신 apply-templates를 사용하는 것이 좋습니다. 해결책은 다음과 같습니다.

<xsl:template match='movie/titles'> 
<xsl:call-template name="Transf"> 
    <xsl:with-param name="T1"><xsl:value-of select="tile[@id=$T1]"/></xsl:with-param> 
</xsl:call-template> 
</xsl:template> 

당신은 $T1라는 변수/매개 변수를 참조하고 있지만, 템플릿에 정의 된 같은 이름의 변수/매개 변수가 없습니다 :

<xsl:template match='director/filmDirectors'> 
    <xsl:apply-templates> 
     <xsl:with-param name="filmDirectors" select="." tunnel="yes" /> 
    </xsl:apply-templates> 
</xsl:template> 

<xsl:template match='movie/titles'> 
    <xsl:param name="filmDirectors" tunnel="yes" /> 
    <xsl:value-of select="concat('title: ',.,' director: ',$filmDirectors)" /> 
</xsl:template> 
+0

터널링 변수는 xslt 2.0에서만 사용할 수 있으며 주어진 솔루션에는 필요하지 않습니다. – Joep

+0

답장을 보내 주셔서 감사합니다. 하지만 우리가 왜 연결을 사용하는지 설명 할 수 있습니까? 가능한 방법은 없나요? – MJason

+0

방금 ​​매개 변수의 값을 포함하는 결과의 형식을 지정하는 방법으로 concat 함수를 사용했습니다. –

0

나는 당신의 문제가 여기에 생각합니다.

$T1라는 글로벌 변수/매개 변수가없는 한, 위의 코드는 컴파일 타임 오류의 원인이됩니다.

다른, 심각한 오류가에있다 : 전화 - 템플릿 "

당신을위한 나의 추천이 소개를 읽을 수 있습니다 :

<xsl:template match='director/filmDirectors'> 
    <xsl:call-template name="Transf"> 
    <xsl:if test="filmDirector='Allen Woody'"> 
     <xsl:value-of select="@id"/><xsl:with-param name="T1" select="@id"/> 
    </xsl:if> 
    </xsl:call-template> 
</xsl:template> 

xsl:if는 XSL`의 자식이 될 수 없습니다 XSLT에 대한 책을 읽어보십시오. 오류가 가득 찬 질문을하기 전에.