gpt4 book ai didi

perl - XML::LibXSLT 间歇性地抛出样式表编译错误

转载 作者:行者123 更新时间:2023-12-04 17:18:03 25 4
gpt4 key购买 nike

我有一组以前运行良好的 XSLT 样式表。最近,一位开发人员将我们的 Perl 升级到了更新版本。从那时起,我们就在定义 EXSLT 函数的地方遇到间歇性的样式表编译错误。

这是错误的示例:

element param only allowed within a template, variable or param



该变量是在 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;

最佳答案

根据经验,mod_perl 做了很多有趣的事情,例如 JSON::XS 在 mod_perl 下工作很糟糕,并导致严重的内存泄漏 + 进程卡住,所以我转向 JSON::Tiny,这是一个原生且简单的代码 - mod_perl 可以处理

我觉得 XML::LibXSLT 有同样的问题,我将代码从 XML::LibXSLT 迁移到使用 native xsltproc出于这个原因,是的,它需要生成,但如果你做得对,开销不会比你现在所做的更糟,而且更稳定

所以我的建议是从 XML::LibXSLT 转移到 xsltproc (二进制)我在 mod_perl 下使用它没有问题,或者找到一些其他库来为你做 XSLT 转换(也许 FOP ?)

关于perl - XML::LibXSLT 间歇性地抛出样式表编译错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19941313/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com