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

时间:2016-06-09 17:25:41

标签: xslt 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有新的&#39;,则包名称应为新目标,如果输出具有&#39; AG&#39;,则名称应为新目标 - 非。 其他名称应该是新的目标。我只想要两个单独的模板。我现在变得空虚了。请帮助我实现这个目标以及如何纠正它?

1 个答案:

答案 0 :(得分:0)

猜测,XPath <body ng-controller="MainCtrl"> <p>Hello {{name}}!</p> <input type="file" file-reader="fileContent" /> <button type="button" ng-click="save(fileContent);">Save</button> <div>{{fileContent}}</div> </body> $scope.save = function(data) { console.log(data) } 没有选择您期望的内容,因此所有条件都失败了。由于您不提供任何XML输入,因此无法确定。

问自己几个问题:

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

只有存在Output子元素并且其字符串值包含序列&#39; AG&#39;时,您生成的PackageName元素才是非空的。它将包含字符串&#39; New Goal - Non&#39;仅当输出子项包含&#39; AG&#39;并且ID子项包含NEW。创作中的任何力量都无法使其具有“新目标”的价值,因为模板CheckForAgency会产生一个以&#39;结尾的值。 - 非&#39;或根本没有输出。 (您可能希望了解XSLT中的选择/何时指令。)