以前は問題なく動作していた一連の XSLT スタイルシートがあります。最近、仲間の開発者が Perl を新しいバージョンにアップグレードしました。その時以来、EXSLT 関数が定義されている場所で断続的なスタイルシート コンパイル エラーが発生しています。
エラーの例を次に示します。
要素のパラメーターは、テンプレート、変数、またはパラメーター内でのみ許可されます
変数は EXSLT 関数内で定義されます。エラーが受信されると、Apache (mod_perl と組み合わせて使用) を再起動するまで、Web ページにアクセスしようとするたびにエラーが表示されます。再起動後、XML::LibXSLT と EXSLT 関数を呼び出す Web ページを一度は正しく表示できますが、ページをリロードすると再びエラーが発生します。
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"/>
追加の調査結果:
この質問を最初に投稿した後、mod_perl の代わりに単純な古い CGI を使用すると、エラーをまったく再現できないことがわかりました。さらに、Apache httpd.conf で次の行を見つけました。コメントアウトすると、エラーが完全になくなるわけではありませんが、エラーの発生頻度が劇的に低下することがわかりました。
PerlModule XML::LibXSLT;