如何在xslt 1.0中从另一个模板调用模板



我有两个这样的模板。。。一个用于创建正常的包名称,另一个用于在名称中附加"-Non",如果它通过特定条件,如所示

<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为"New",则包名称应为"New Goal";如果Output为"AG",则名称应为New Goal-Non。其他名称应该是新目标。我只想要两个单独的模板。我现在得到的是空值。请帮助我实现这一点,以及如何纠正它?

猜测,XPathsIDOutput没有选择您期望的内容,因此所有条件都失败了。由于您不提供任何XML输入,因此无法确定。

问自己几个问题:

  • 当评估此代码时,当前元素是什么
  • 此元素是否具有名为ID的子元素
  • 那个元素的字符串值是多少
  • 它有一个名为Output的子元素吗
  • 它的字符串值是多少

只有当存在Output子项并且其字符串值包含序列"AG"时,您生成的PackageName元素才会为非空。仅当Output子项包含"AG"且ID子项包含New时,它才会包含字符串"New Goal-Non"。由于模板CheckForAgency要么生成以"-Non"结尾的值,要么根本没有输出,因此创建过程中没有任何力量可以使其具有值"New Goal"。(您可能希望阅读XSLT中的选择/何时指令。)

相关内容

  • 没有找到相关文章

最新更新