加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

perl – XML :: LibXSLT间歇性地引发样式表编译错误

发布时间:2020-12-15 23:32:52 所属栏目:大数据 来源:网络整理
导读:我有一套以前工作正常的XSLT样式表.最近,一位开发人员将我们的Perl升级到了更新的版本.从那时起,我们一直在获得间歇性的样式表编译错误,其中定义了EXSLT函数. 以下是错误的示例: element param only allowed within a template,variable or param 该变量在E
我有一套以前工作正常的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迁移到使用本机xsltproc因为这个原因,是的,它需要产生,但是如果你做得对,那么开销并不会更糟你现在在做什么,而且更稳定

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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读