我有一组以前运行良好的 XSLT 样式表。最近,一位开发人员将我们的 Perl 升级到了更新的版本。从那时起,我们就在定义 EXSLT 函数时遇到间歇性样式表编译错误。
以下是错误示例:
元素参数只允许在模板、变量或参数中
该变量在 EXSLT 函数中定义。一旦收到错误,每次我尝试访问我的网页时都会收到错误,直到我重新启动 Apache(与 mod_perl 一起使用)。重启后,我可以让调用 XML::LibXSLT 的网页和 EXSLT 函数正常显示一次,但是重新加载页面会再次触发错误。
阅读 XML::LibXSLT 文档后,我确认 HAVE_EXSLT() 函数返回值 1。我当前的 XML::LibXSLT 版本是 1.79。我的 LibXSLT DLL 是 1.1.28。我的 perl 版本是 5.14.3。之前工作的版本分别是 5.8.8、1.66 和 1.1.22。
为什么我现在看到这些错误,而我以前没有?下面是引发编译错误的样式表的开头片段。如果有任何其他有用的信息可以提供,请告诉我。
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:exsl="http://exslt.org/common"
xmlns:func="http://exslt.org/functions"
xmlns:dtbl="http://docbook.sourceforge.net/dtbl"
extension-element-prefixes="func"
exclude-result-prefixes="exsl func dtbl"
version="1.0">
<func:function name="dtbl:convertLength">
<xsl:param name="arbitrary.length"/>
其他发现:
在我最初发布这个问题之后,我发现如果我使用普通的旧 CGI 而不是 mod_perl,我根本无法重现该错误。此外,我在我的 Apache httpd.conf 中找到了以下行。在注释掉它时,我看到错误发生的频率急剧下降,尽管它并没有完全消除错误。
PerlModule XML::LibXSLT;