XSLT / Java:错误:'无法找到外部方法'max'(必须是公共的)。

时间:2009-03-13 16:55:46

标签: java xml xslt jstl transform

我正在复制XSLT Cookbook: 2nd Edition的一个例子(O'Reilly:Mangano,2006),其中Mangano用SVG创建了一个树形图。作为快速测试此代码的一种方法,我只是使用JSTL的<x:transform/>标记转换XML,并在Jetty 6中运行它.XSLT似乎在调用java:java.lang.Math:max时挂起,说:

  

错误:'无法找到外部方法'max'(必须公开)。   致命错误:'无法编译样式表'

这里给出了错误的代码包含在这里调用...Math:max(...

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.1"
                xmlns:emath="http://www.exslt.org/math"
                xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
                xmlns:tree="http://www.ora.com/XSLTCookboox/ns/tree"
                xmlns:xalan="http://xml.apache.org/xslt"
                xmlns:Math="xalan:java.lang.Math">
...
<!--Pass 1 copies input with added bookkeeping attributes -->  
<xsl:variable name="treeWithLayout">
  <xsl:apply-templates mode="layout"/>
</xsl:variable>

<xsl:variable name="maxPos" 
      select="Math:max($treeWithLayout/*/@tree:WEIGHT * 
                       ($nodeWidth + $horzSpace),
                       $treeWithLayout/*/@tree:MAXDEPTH * 
                         ($nodeHeight + $vertSpace))"/>
...

2 个答案:

答案 0 :(得分:1)

我发现了usage online

<xsl:stylesheet version="1.0" 
  xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
  xmlns:math="xalan://java.lang.Math"
  extension-element-prefixes="math">

答案 1 :(得分:1)

如果有任何遗漏的参数,您可以收到此消息。例如:

你写

<xsl:variable name="maxPos" select="Math:max(9)"/>

而不是

<xsl:variable name="maxPos" select="Math:max(9, 15)"/>