dowdw44426 2013-05-25 17:18
浏览 42
已采纳

为什么不能在XSL模板选择器谓词中使用变量?

Given this XML;

<root>
  <foo x='1'/>
  <foo x='3'/>
  <foo x='7'/>
</root>

and this stylesheet;

<xsl:transform version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">

  <xsl:template match="root">
    <result>
      <xsl:apply-templates select="foo"/>
    </result>
  </xsl:template>

  <xsl:template match="foo[@x > 2]">
    <xsl:copy-of select="."/>
  </xsl:template>

</xsl:transform>

I get the desired result;

<result>
  <bar x="3"/>
  <bar x="7"/>
</result>

But if the template match for foo is changed to use a variable $i instead of a constant;

<xsl:transform version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">

  <xsl:variable name="i" select="2"/>  

  <xsl:template match="root">
    <result>
      <xsl:apply-templates select="foo"/>
    </result>
  </xsl:template>

  <xsl:template match="foo[@x > $i]">
    <xsl:copy-of select="."/>
  </xsl:template>

</xsl:transform>

then I get this error;

XSLTProcessor::importStylesheet(): compilation error: Failed to compile predicate

Am I doing something wrong or can't variables be used in that way?

I have tried declaring the variable in other ways eg;

  <xsl:variable name="i" select="2"/>
  <xsl:variable name="i">2<xsl:variable>

but it always fails to compile the stylesheet.

I'm using the PHP XSL 1.0 processor libxslt;

PHP Version      5.3.2
libxslt Version  1.1.23
  • 写回答

1条回答 默认 最新

  • dougu3988 2013-05-28 22:46
    关注

    No, variables cannot be referred to in template match patterns (or in xsl:key instructions).

    Why not? Because the declaration of a variable is allowed to contain a call to xsl:apply-templates -- so allowing variable references in template match patterns would make circular variable declarations possible.

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

悬赏问题

  • ¥30 关于<main>标签页面跳转的问题
  • ¥80 部署运行web自动化项目
  • ¥15 腾讯云如何建立同一个项目中物模型之间的联系
  • ¥30 VMware 云桌面水印如何添加
  • ¥15 用ns3仿真出5G核心网网元
  • ¥15 matlab答疑 关于海上风电的爬坡事件检测
  • ¥88 python部署量化回测异常问题
  • ¥30 酬劳2w元求合作写文章
  • ¥15 在现有系统基础上增加功能
  • ¥15 远程桌面文档内容复制粘贴,格式会变化