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

发布于 2024-07-15 05:11:46 字数 1308 浏览 4 评论 0原文

我正在复制 XSLT Cookbook:第二版(O'Reilly:Mangano,2006)中的示例,其中Mangano 使用 SVG 创建树形图。 作为快速测试此代码的一种方法,我只是使用 JSTL 的 标记转换 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))"/>
...

I am copying an example from XSLT Cookbook: 2nd Edition (O'Reilly: Mangano, 2006) where Mangano creates a tree diagram with SVG. As a way to quickly test this code, I am simply transforming the XML using JSTL's <x:transform/> tag, and running it in Jetty 6. The XSLT seems to be getting hung on calling java:java.lang.Math:max, saying:

ERROR: 'Cannot find external method 'max' (must be public).'
FATAL ERROR: 'Could not compile stylesheet'

The code that gives me the error is contained in here where ...Math:max(... is called:

<?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))"/>
...

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

罗罗贝儿 2024-07-22 05:11:46

我发现这个在线用法

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

I found this 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">
全部不再 2024-07-22 05:11:46

如果缺少任何参数,您会收到此消息。 例如:

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

改为写

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

You can get this message if there is any missing argument. For example:

You write

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

instead

<xsl:variable name="maxPos" select="Math:max(9, 15)"/>
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文