【问题标题】:EXSLT - math:random don't workEXSLT - 数学:随机不起作用
【发布时间】:2013-11-19 13:47:24
【问题描述】:

我想使用 EXSLT 的函数 math:random() 但我不能让它工作。这是我的测试,文件xslt:

<xsl:stylesheet xmlns:math="http://exslt.org/math" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0" extension-element-prefixes="math">
<xsl:import href="math.xsl"/>
<xsl:template match="/">
    <xsl:value-of select="(floor(math:random()*10) mod 10) + 1"/>
</xsl:template>
</xsl:stylesheet>

这是简单的 xml 文件:

<?xml-stylesheet type="text/xsl" href="stile.xslt"?>
<radice>
   ciao!
</radice>

这个例子不应该打印 me "ciao!"和一个从 1 到 10 的随机数? 非常感谢您的帮助。

【问题讨论】:

  • 那么它会生成什么作为输出?
  • 那么还有其他问题。由于您正在匹配 yuor 文档的根,而不是生成除数学函数之外的 任何 输出,如果“ciao!”出现了,似乎根本没有进行任何转换。
  • 也许我以不正确的方式安装了库 EXSLT,或者库 EXSLT 与我的数据库“ExistDB”不兼容?
  • 我发现如果我删除&lt;xsl:import href="math.xsl"/&gt;,它会打印正确的xml文件结构(但不要总是打印随机数)。
  • 您是否有权访问 XSLT 处理器的任何错误输出?它是否有可能告诉您它找不到 math.xsl,或者无法识别函数 math:random()?或者 math.xsl 与您运行的 XSLT 版本不兼容?

标签: xml xslt exslt


【解决方案1】:

根据EXSLT - math:random() 文档,以下 XSLT 处理器支持该函数:4XSLT、libxslt、msxsl。您使用的是什么 XSLT 处理器?

根据this page,ExistDB 的默认值是 Xalan,它不是列出的处理器之一。 (不过,根据Xalan's documentation,它确实提供了math:random()。)

如果您没有配置不同的处理器,那将是一个很好的尝试。我个人的推荐是撒克逊。根据its documentation,支持EXSLTmath:random()

但是,在我看来,您的 XSLT 处理器可能根本没有被调用。你能告诉我们你是如何告诉 ExistDB 运行你的样式表的吗?你有没有让它运行任何样式表?

【讨论】:

  • 我同意 LarsH,您运行样式表的方式有问题。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2014-05-12
  • 2011-01-19
  • 2010-11-05
  • 1970-01-01
  • 2021-03-29
  • 2013-04-13
  • 2011-07-28
相关资源
最近更新 更多