我有以下模板,我不确定是否正确
<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
我想创建具有值&#39;修订目标&#39;的PackageName元素。 但是现在我得到了空的PackageName。不知道我的代码失败了。 请帮忙。
答案 0 :(得分:0)
如果要访问参数,则需要使用$
前缀。也就是说,做contains($Type,'NEW')
而不是contains(Type,'NEW')
。后者正在寻找一个名为Type
的子元素,而不是传入的参数
试试这个模板。请注意,您实际上不需要使用xsl:value-of
和concat
来输出文本。
<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:choose
/ xsl:when
代替xsl:if
。
您可以使用与问题中显示的完全相同的方式调用此模板
<xsl:element name="PackageName">
<xsl:call-template name="createName">
<xsl:with-param name="Type" select="s0:PIXField/s0:TransactionID"/>
</xsl:call-template>
</xsl:element>
根本没有任何变化。