Sco*_*ott 5 apache xslt perl mod-perl libxslt
我有一套以前工作正常的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"/>
Run Code Online (Sandbox Code Playgroud)
其他发现:
在我最初发布这个问题之后,我发现如果我使用普通的旧CGI而不是mod_perl,我根本无法重现错误.另外,我在Apache httpd.conf中找到了以下行.在评论它时,我看到错误发生的频率急剧下降,尽管它没有完全消除错误.
PerlModule XML::LibXSLT;
Run Code Online (Sandbox Code Playgroud)
根据经验,mod_perl 做了很多有趣的事情,例如 JSON::XS 在 mod_perl 下工作得很糟糕,导致严重的内存泄漏+进程卡住,所以我转向 JSON::Tiny,这是一个原生且简单的代码 - mod_perl 可以处理
我有一种感觉 XML::LibXSLT 也有同样的问题,xsltproc出于这个原因,我将我的代码从 XML::LibXSLT 迁移到使用本机,是的,它需要生成,但如果你做得正确,开销并不比什么更糟糕你现在做的,而且比较稳定
所以我的建议是从 XML::LibXSLT 转移到xsltproc我在 mod_perl 下使用的(二进制),没有问题,或者找到一些其他库来为您进行 XSLT 转换(也许是 FOP?)
| 归档时间: |
|
| 查看次数: |
183 次 |
| 最近记录: |