2012-05-08 2 views
0

내부에서 발생 :호출 XSLT 템플릿은 그래서 XSLT에 대한 신원 디자인 패턴을 사용하고있어 XSLT

<xsl:template match="@*|node()"> 
    <xsl:copy> 
    <xsl:apply-templates select="@*|node()[not(@visible='false')]"/> 
    </xsl:copy> 
</xsl:template> 

그리고 서로 다른 노드와 일치하는 많은 템플릿을해야합니까. 이제 내가 원하는 것은 하나의 xsl : 템플릿 안에 코드를 생성하고 또 다른 xsl : 템플릿이 새로 생성 된 코드와 일치하도록하는 것입니다. 이 작업을 수행하는 방법을 알고있는 사람은 누구입니까? 내가하고 싶은 것에


예 :

<xsl:template match="button"> 
    <a href="@url" class="button"> <xsl:value-of select="@name" /> </a> 
</xsl:template> 

<xsl:template match="stuff"> 
    <!-- do some stuff --> 
    <!-- get this following line parsed by the template over! --> 
    <button url="something" name="a button" /> 
</xsl:template> 
+0

버튼을 추가하고 싶지만 스크립트의 일부분을 생성하는 버튼이 실제 버튼 마크 업을 생성하게하기 때문에. – Knarf

답변

3

당신은 당신이 의도에 재사용 코드 그러나, 당신이하려고하는 방법으로 수행 할 작업을 확실히 할 수 없다 중복 된 템플릿을 피한다면, 일치하는 템플릿을 매개 변수와 함께 명명 된 템플릿으로 호출 할 수 있습니다.

<xsl:template match="button" name="button"> 
    <xsl:param name="url" select="@url" /> 
    <xsl:param name="name" select="@name" /> 
    <a href="{$url}" class="button"> <xsl:value-of select="$name" /> </a> 
</xsl:template> 

그래서이 버튼 요소와 일치하는 경우, 여기에, 그것은 URL이름 기본 값으로 속성을 사용하지만 명명 된 템플릿으로 호출하는 경우, 당신은 할 수 당신은 node-set() 확장 기능을 사용하여 일부 멀티 패스 처리를 할 수 있어야 자신의 매개 변수

<xsl:template match="stuff"> 
    <!-- do some stuff --> 
    <!-- get this following line parsed by the template over! --> 
    <xsl:call-template name="button"> 
    <xsl:with-param name="url" select="'something'" /> 
    <xsl:with-param name="name" select="'A button'" /> 
    </xsl:call-template> 
</xsl:template> 
1

전달합니다.

<xsl:stylesheet version="1.0" 
xmlns:xsl="http://www.w3.org/1999/XSL/Transform" 
xmlns:ext="http://exslt.org/common" exclude-result-prefixes="ext"> 
<xsl:output omit-xml-declaration="yes" indent="yes"/> 

    <xsl:template match="/*"> 
    <xsl:variable name="first_pass"> 
     <xsl:apply-templates select="button" /> 
    </xsl:variable> 

    <xsl:apply-templates mode="second_pass" select="ext:node-set($first_pass)/*" /> 
    </xsl:template> 

    <xsl:template match="button"> 
    <a href="@url" class="button"> <xsl:value-of select="@name" /> </a> 
    </xsl:template> 

    <xsl:template match="stuff" mode="second_pass"> 
    <!-- do some stuff --> 
    <!-- get this following line parsed by the template over! --> 
    <button url="something" name="a button" /> 
    </xsl:template> 
</xsl:stylesheet> 

XSLT - apply a template to call-template result의 첫 번째 답변에서 자세한 내용을 확인할 수 있습니다.