第一次出现标记时出现XSLT1错误



这个问题(以及我的问题)类似于XSLT1获取特定标记的第一个出现。。。但我有一个"未定义变量"错误。

我有一个具有refpos属性的XML,它可以由第一个XSLT 生成

  <xsl:template match="p[@class='ref']">
          <xsl:copy>
             <xsl:attribute name="refpos">
               <xsl:value-of select="position()"/>
             </xsl:attribute>
             <xsl:apply-templates />
           </xsl:copy>
  </xsl:template>
      <xsl:template match="@*|node()" name="idt">
         <xsl:copy><xsl:apply-templates select="@*|node()"/></xsl:copy>
      </xsl:template>

然后,我有一个主要的(第二个)XSLT,

      <xsl:variable name="firstRef">
         <xsl:value-of select="(//p[@class='ref'])[1]/@refpos"/>
      </xsl:variable>
  <xsl:template match="p[@refpos=$firstRef]">
    <title><xsl:apply-templates /></title>
  </xsl:template>
      <xsl:template match="@*|node()" name="idt">
         <xsl:copy><xsl:apply-templates select="@*|node()"/></xsl:copy>
      </xsl:template>

但是这个XSLT在这里不起作用!!


PS:我也相信XSLT1可以让我们一步到位。

XSLT1.0不允许在模板匹配表达式中引用变量(XSLT2.0允许)。您必须将检查从模板内的谓词移动:

<xsl:template match="p">
  <xsl:choose>
    <xsl:when test="@refpos=$firstRef">
      <title><xsl:apply-templates /></title>
    </xsl:when>
    <xsl:otherwise>
      <xsl:call-template name="idt" />
    </xsl:otherwise>
  </xsl:choose>
</xsl:template>

相关内容

  • 没有找到相关文章

最新更新