0

次のヘッダーを持つ XSLT スタイルシートがあります

  <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
    xmlns:lxslt="http://xml.apache.org/xslt"
    xmlns:redirect="org.apache.xalan.xslt.extensions.Redirect"
    extension-element-prefixes="redirect"
   xmlns:msxsl="urn:schemas-microsoft-com:xslt" xmlns:my-ext="ext1">

カスタム関数もあります:

<msxsl:script language="JavaScript" implements-prefix="my-ext">

    var lineCounter = 0;
    var totalPages = 0;
    var currentPage = 1;
    var currentObject = '';
    var colSpan = 0;

    function getLineCounter()
    {
        return lineCounter;
    }

    function updateLineCounter(aValue)
    {
        lineCounter += aValue;
         return '';
    }

カスタム関数は xsl 全体で使用されます。コマンド ラインからこの XSL を使用して XML を変換すると、msxsl.exeを使用して完全に機能し、完全な HTML が生成されます。

OK、ここに問題があります。PHP を使用してサーバー上で変換を実行し、結果を送り返そうとしています。私はこの手順を問題なく何度も使用しました。ただし、MSXSL 拡張機能と関数で試したのはこれが初めてです。

サンプル エラーは次のようになります。

Warning: XSLTProcessor::transformToXml() [xsltprocessor.transformtoxml]: xmlXPathCompOpEval: **function resetAll not found** in D:\Development\AppServ\www\RJFWEB\jqueryFileTree\PHPMain.php on line 49

Warning: XSLTProcessor::transformToXml() [xsltprocessor.transformtoxml]: **Unregistered function** in D:\Development\AppServ\www\RJFWEB\jqueryFileTree\PHPMain.php on line 49

関数が見つからない/理解されていないことがわかりますが、これはmsXSL.exe を使用してコマンド ラインで実行したコードと同じです。

SO、最終的には、MS拡張機能の使用方法を理解するためにPHP.iniに修正/追加する必要があるかどうかを調べようとしていますか、それともXSLスタイルシートを変更する必要がありますか?

男... この質問が理にかなっていることを願っています! どんな助けでも感謝します。ありがとう。

ロブ

私のphpInfoが表示されます

**XSL**
XSL                                      enabled
libxslt Version                              1.1.23
libxslt compiled against libxml Version      2.6.32
EXSLT                                    enabled
libexslt Version                             0.8.13
4

1 に答える 1

1

これmsxsl:scriptは、JScript または VBScript を使用して拡張関数を記述できる独自の拡張機能です。libxslt はそれをサポートしていないと思います。ただし、PHP 5 と libxslt を使用すると、PHP で拡張関数を作成できます。 http://php.net/manual/en/xsltprocessor.registerphpfunctions.phpを参照してください。純粋な XSLT を使用して要件を実装できない場合は、J(ava)Script で記述された関数を PHP に移植し、http://php.netを利用する必要があります。 /manual/en/xsltprocessor.registerphpfunctions.phpを追加して、XSLT でこれらの関数を使用します。

別の方法として、MSXML を使用できる Windows で PHP を実行する場合、PHP から使用することをお勧めします。たとえば、 class.com.phpを使用してスタイルシートを実行するメソッドをnew COM("MSXML2.DomDocument.3.0")含む MSXML DOM ドキュメントを提供する必要があります。transformNodemsxsl:script

于 2012-10-10T12:03:18.710 に答える