0
我有两个模板,这样的...一个创建普通包名称和另一个追加“ - 非”的名称,如果它通过一定的条件下,如图如何在XSLT调用模板从另一个模板1.0
<xsl:template match="text()" name="checkForAgency">
<xsl:param name="Name"/>
<xsl:param name="Agency"/>
<xsl:if test="contains($Agency,'AG') ">
<xsl:value-of select="concat($Name,' - Non')"/>
</xsl:if>
</xsl:template>
<xsl:template match="text()" name="createPackageName">
<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:if test="contains($Type,'REN') or contains($Type,'ARN')">
<xsl:value-of select="concat('Renewal',' Goal')"/>
</xsl:if>
</xsl:template>
从
<xsl:variable name="NonAgencyPackageName">
<xsl:call-template name="createPackageName">
<xsl:with-param name="Type" select="ID"/>
</xsl:call-template>
</xsl:variable>
<xsl:element name="PackageName">
<xsl:call-template name="checkForAgency">
<xsl:with-param name="Name" select="$NonAgencyPackageName"/>
<xsl:with-param name="Agency" select="Output"/>
</xsl:call-template>
</xsl:element>
调用这些模板,如果ID有“新建”,包名应该有新的目标,如果输出有“AG”,那么名字应该是新的目标 - 非。 其他名称应该是新的目标。我只想要两个单独的模板。我现在得到空值了。请帮助我实现这个目标以及如何纠正它?
既有匹配='和'name ='的模板我从未见过 - 它有'match ='(或许''mode = ')或'name ='但不匹配='然后,建议再次提出你的xslt书:)或显示(编辑问题)你的输入和期望的输出xmls看起来像 –
@StefanHegny是正确的建议你检查你的模板:除非你在样式表的其余部分做了非常聪明的事情(如果你聪明,你不会有这个问题),在命名模板上有一个'match'属性是毫无意义的。不是非法的(具有'match'和'name'的模板都很好),但在这种特殊情况下毫无意义,因此让维护程序员感到困惑。 –