【问题标题】:XPath expression fn:max() not recognizedXPath 表达式 fn:max() 无法识别
【发布时间】:2018-07-23 21:32:47
【问题描述】:

谁能告诉我为什么fn:max 的以下用法不起作用?

XML 文档:

<?xml version="1.0" encoding="UTF-8"?>
<a>
<b>1</b>
<b>2</b>
<b>3</b>
</a>

XSLT 样式表:

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="2.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match="/">
  <html>
  <body>
       <p><xsl:value-of select="count(a/b)"/></p>
       <p><xsl:value-of select="max(a/b)"/></p>
  </body>
  </html>
</xsl:template>
</xsl:stylesheet>

count() 的调用返回正确的结果,但我使用的每个XSLT 引擎(即Firefox 和Apache FOP)都拒绝对max() 的调用,即使Apache says that FOP supports it 也是如此。

我做错了什么?

【问题讨论】:

    标签: xml xslt xpath xslt-2.0 xsl-fo


    【解决方案1】:

    因为max() 需要 XSLT / XPath 2.0,而您的处理器只支持 XSLT / XPath 1.0:

    • Firefox(和所有浏览器)仅支持 XSLT 1.0。
    • Apache FOP 不是 XSLT 处理器;它是一个 XSL-FO 处理器。你 可能会通过 XSLT 1.0 或 2.0 生成 XSL-FO,但您引用的表 列出您可能包含在 XSL-FO 中的函数,而不是函数 可以包含在 XSLT 中。

    请注意,您的 XSLT 生成的是 HTML,而不是 XSL-FO。

    另见

    【讨论】:

    • 如果您使用的是 Apache FOP,那么您就进入了 Java 世界,因此很容易切换到 Saxon 以获得 XSLT 2.0(和 3.0)功能。在浏览器上,您可以选择使用同样支持 XSLT 3.0 的 Saxon-JS。
    猜你喜欢
    • 2017-12-08
    • 2012-02-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-12-09
    • 2016-07-20
    相关资源
    最近更新 更多