1.0

2016-06-09 2 views
0

내가 올바른 확실하지 오전이 다음 템플릿 또는 여기되지1.0

<xsl:template match="text()" name="createName"> 
    <xsl:param name="Type"/> 
    <xsl:if test="contains(Type,'NEW')"> 
     <xsl:value-of select="concat('New','Goal')"/> 
    </xsl:if> 
    <xsl:if test="contains(Type,'AMD')"> 
     <xsl:value-of select="concat('Amended','Goal')"/> 
    </xsl:if> 
</xsl:template> 

호출이 템플릿을

<xsl:element name="PackageName"> 
       <xsl:call-template name="createName"> 
        <xsl:with-param name="Type" select="s0:PIXField/s0:TransactionID"/> 
       </xsl:call-template> 
       </xsl:element> 

S0 : PIXField/S0 : transactionId는 = BPA201605311506452806320060A1AMD

값이 'Amended Goal'인 PackageName 요소를 만들고 싶습니다. 하지만 지금은 빈 PackageName지고 있습니다. 내 코드가 실패한 곳을 모른다. 도와주세요.

답변

0

매개 변수에 액세스하려면 $ 접두어를 사용해야합니다. 즉, contains($Type,'NEW')이 아니라 contains(Type,'NEW')이 아닙니다. 후자는 Type이라는 자식 요소를 찾고 매개 변수가 전달되지 않습니다.

이 템플릿을 사용해보십시오. 텍스트를 출력하기 위해 xsl:value-ofconcat과 함께 사용할 필요는 없습니다.

<xsl:template match="text()" name="createName"> 
    <xsl:param name="Type"/> 
    <xsl:if test="contains($Type,'NEW')"> 
     <xsl:text>New Goal</xsl:text> 
    </xsl:if> 
    <xsl:if test="contains($Type,'AMD')"> 
     <xsl:text>Amended Goal</xsl:text> 
    </xsl:if> 
</xsl:template> 

또한 템플릿이 오직 명명 된 템플릿으로 호출되는 경우 실제로 어느 템플릿에 match 속성을 필요로하지 않을 수 있습니다.

xsl:if 대신 xsl:choose/xsl:when을 사용하는 것도 좋습니다.

<xsl:element name="PackageName"> 
    <xsl:call-template name="createName"> 
     <xsl:with-param name="Type" select="s0:PIXField/s0:TransactionID"/> 
    </xsl:call-template> 
</xsl:element> 

아무것도 모든이 변경 질문과 같이

당신은 정확히 같은 방식으로이 템플릿을 호출합니다.

+0

xsl : element name = "PackageName"에 텍스트를 출력해야합니다. – user3331421

+0

예. 귀하의 질문에 이미 요소를 출력하는 코드가 포함되어 있으므로 비트는 그대로 유지됩니다. 필자는 필자가 대답을 편집하여 템플릿 자체에 대한 실수를 바로 잡았습니다. –