属性构造实体中的错误,行:14

时间:2011-12-31 18:58:14

标签: xslt

我有这个xslt:

<xsl:param name="total_articles" select="3" />
<xsl:param name="articles_per_page" select="3" />

<xsl:apply-templates select="dagboek/entry[position &gt; $offset][position &lt; $articles_per_page+$offset]" >
   <xsl:with-param name="total_pages" tunnel="yes">
  <xsl:choose>
          <xsl:when test="$value="2005-09" and $page="1">8</xsl:when>
         <xsl:otherwise>floor(number($total_articles)-1) div $articles_per_page +1</xsl:otherwise>
  </xsl:choose>
  </xsl:with-param>
</xsl:apply-templates>

但现在我收到了这个错误。

如何计算计算结果并将其放入param total_pages中。

鲁洛夫

编辑1:我尝试实现的目标是,如果它不是2005-09且页面不是1,那么总页数是从total_articlesarticles_per_page计算出来的。结果必须放在参数页面中。

3 个答案:

答案 0 :(得分:1)

<xsl:when test="$value="2005-09" and $page="1">8</xsl:when>

这甚至不是格式良好的XML文档。问题在于嵌套引号。

可能意味着

<xsl:when test="$value='2005-09' and $page='1' ">8</xsl:when>

另一个可能的问题:隧道参数仅在XSLT 2.0中可用。你似乎在使用XSLT 1.0

<强>更新

评论中的OP修改/澄清了他的初步问题:

  

我试图实现的是,如果它不是2005-09而且页面不是1   那么总页数是从total_articles和   articles_per_page。结果必须放在参数页面中。

这可以简单地表达为:

   <xsl:with-param name="total_pages" select=
    "8*($value='2005-09' and $page='1')
    +
     (floor(number($total_articles)-1) div $articles_per_page +1)
    *
     not($value='2005-09' and $page='1')
    "/>

<强>解释

我们使用的事实是,如果number($someBoolean)1,则$someBoolean定义为true()0 $someBooleanfalse() if($vCond) then $vNum1 else $vNum2

因此伪代码:

$vNum1*$vCond + $vNum2*not($vCond )

可以用单个XPath表达式表示:

$vCond

只要布尔值是算术运算符的参数,它就会自动转换为数字。

所以,这是在运行时发生的事情:

  1. 假设true()not($vCond),因此false()$vCond

  2. 由于not($vCond)*1运算符的参数,因此它们分别转换为数字0$vNum1*1 + $vNum2*0

  3. ...

    $vNum1*1
    
    1. 这相当于:
    2. ...

      $vCond1

      注意

      上述等价规则可以进一步推广到N 互斥条件$vCond2$vCondN,...,$val1和相应的N值: $val2$valN,...,$val1*$vCond1 + $val2*$vCond2 + ... + $valN*$vCondN

      $valK
      k{1,..., N}

      时,

      等于$vCondKtrue()中的{{1}})

答案 1 :(得分:0)

您的格式错误:

<xsl:when test="$value="2005-09" and $page="1">8</xsl:when>

应该看起来像:

<xsl:when test="$value='2005-09' and $page='1'">8</xsl:when>

答案 2 :(得分:0)

这是这条线吗?

<xsl:when test="$value="2005-09" and $page="1">8</xsl:when>

你正在嵌套双引号 - 这不会起作用。使用单引号和双引号的组合:

<xsl:when test='$value="2005-09" and $page=1'>8</xsl:when>