【问题标题】:Calling Xalan function调用 Xalan 函数
【发布时间】:2016-01-28 18:08:18
【问题描述】:

在我尝试在 XMLspy 中调试的样式表中,我有以下行:

xsl:for-each select="xalan:nodeset($Order)//Lines"

当我尝试在 XMLSpy 中解析它时,我收到错误:'function 'xalan:nodeset' is not defined。我使用外部 XSL 转换,但我认为这还不够,我必须在我的样式表中定义它。

对于如何从样式表在我的笔记本电脑上本地调用此函数,我很感激。

【问题讨论】:

  • 如果您想使用 Xalan 特定的扩展功能,您需要将 XMLSpy 配置为使用 Xalan 而不是其内置的 XSLT 处理器。另一方面,在 XMLSpy 支持的 XSLT 2.0 和更高版本中根本不需要节点集函数,因此如果您在 XMLSpy 中使用 XSLT 2.0,您可以简单地将 xalan:nodeset($Order)//Lines 替换为 $Order//Lines
  • 您不需要也不能在自己的样式表中定义 Xalan 节点集函数。如果您正在使用 Xalan 并且已将前缀“xalan”正确绑定到正确的名称空间,那么这应该足以使其正常工作。 (这当然与这里没有人相信您需要此功能这一事实是分开的,因为它在 XSLT 2.0 中是不必要的。如果您确实有需要使用 1.0 的理由,您将不得不明确说明您需要使用1.0——即便如此,我预计没人会相信你。)
  • @C.M.Sperberg-McQueen 很多人不得不使用 XSLT 1.0。
  • @michael.hor257k 我相信你,但我仍然预测不是每个人都会这样做。我很想知道什么情况下需要使用 1.0。在 Web 浏览器中本地运行的样式表; Java 不可用的环境。我想知道还有什么其他原因?
  • @C.M.Sperberg-McQueen 考虑具有内置 XSLT 1.0 引擎的应用程序 - 例如某些数据库或 Adob​​e InDesign。

标签: xslt xalan


【解决方案1】:

如果您没有使用 Xalan 处理器(即使您使用了),请将xalan:nodeset() 替换为更通用的exsl:node-set() - 其中xmlns:exsl="http://exslt.org/common"

这是假设您使用的是 XSLT 1.0。如 cmets 中所述,XSLT 2.0 中不需要 node-set() 函数。

【讨论】:

  • 实际上对于 xalan,我在 Spy 中使用了外部 xsl 程序:java.exe -cp "d:\xalan\2.7.2\xalan.jar" org.apache.xalan.xslt.Process -in %1 -xsl %3 -out %2。仍然在将 xalan 函数替换为 exsl:node-set 之后,我得到了同样的错误。除了命名空间,我应该在 xsl 文件中还是在 xmlspy 本身中预定义它?
  • 当您“调试”XSLT 时,XMLSpy 是否使用 Xalan?
  • @dcx 您需要将正在使用的前缀(xalan:exsl:)绑定到命名空间。此声明需要在 XSLT 样式表中。
  • @Michael 你能用几句话描述一下如何定义它吗?我ve added xmlns:exsl but what else there, should I do so debugger could call this function? It works fine in my webserver when I promote xsl file and use it for email content, but I just cant 让它在 xmlspy 中工作。
  • @Michael 我应用了同样的方法,但我仍然得到这个。我开始怀疑我的 XMLspy 或 Java 是否有问题。我会尝试在其他电脑上检查。
猜你喜欢
  • 1970-01-01
  • 2014-09-04
  • 2013-08-21
  • 2012-05-21
  • 2016-12-25
  • 2014-03-31
  • 2011-04-08
  • 1970-01-01
  • 2010-12-26
相关资源
最近更新 更多