
しかし、今はXSLTの長所と短所については話していません(この技術の反対者と支持者が豊富に見つかると確信しています)。 XSLTテンプレートを使用して既存のプロジェクトで使用するのに便利な1つの手法を説明し、この手法を優れたパフォーマンスで実装するライブラリへのリンクを提供したいと思います。
XMLテキスト表現の生成をバイパスして、データをXSLTに渡す
ページに表示するオブジェクトのネストされたPHPリストを生成するコントローラーがあるとします。 この配列をXMLに変換し、XSLTテンプレートの入力に移動する必要があります。 このPHP構造からXMLへの変換が各コントローラーで手動で実行されなかった場合は便利ですが、テキストのXML表現をバイパスして、XSLTテンプレートを直接PHPデータに適用できる抽象化の中間層がありました。 したがって、エラーの可能性を減らし、手紙を減らします。 データのXML表現をバイパスして、XSLTテンプレートを直接操作できます。
少し前に、CでPHP拡張dom_varimport ( GitHubにも投稿されています )を書きました。 これには同じ名前の関数が含まれ、その入力にはDOMDocumentオブジェクトとネストのPHP配列が提供されます。 この関数は、渡されたDOMDocumentを入力配列のXML表現で満たし、非常に高速に処理します。純粋なPHPで記述されたコードよりも約20倍高速です。 数千のプロパティとオブジェクトが添付されたサイズが約1 MBの大きなドキュメントは、約1〜2ミリ秒で形成されます。
たとえば、呼び出し:
$ doc = new DOMDocument(); dom_varimport( $ doc 配列( "some_key" => 111、 123、 0.5、 "arr" =>配列( "1a" => "1a")、 "obj" =>(オブジェクト)配列( "prop" => "val")、 本当 偽 「b」=> null、 「空」=>配列()、 )、 「root」//オプション、デフォルトは「root」 ); $ doc-> formatOutput = true; echo $ doc-> saveXML(); //これはデバッグ専用です。実際には、saveXML()を呼び出す必要はありません。
このXMLドキュメントを印刷します。
<?xml version = "1.0"?> <ルート> <some_key key = "some_key"> 111 </ some_key> <!-プレーンキー=値-> <item key = "0"> 123 </ item> <!-数値キーは「item」タグです-> <item key = "1"> 0.5 </ item> <!-double-> <arr key = "arr"> <!-ネストされた配列-> <item key = "1a"> 1a </ item> <!-無効なタグ名は「item」に変換されます-> </ arr> <obj key = "obj"> <!-ネストされたオブジェクト-> <prop key = "prop"> val </ prop> </ obj> <item key = "2"> 1 </ item> <!-trueは1に変換-> <item key = "3" /> <!-falseは空の文字列に変換します-> <b key = "b" /> <!-nullも空の文字列に変換-> <empty key = "empty" /> <!-空の配列は空の要素です-> </ root>
配列キーとオブジェクトプロパティは、おそらく同じ名前のXML要素になります(ただし、名前がXML要素に対して有効でない場合は、代わりに「item」が使用されます)。 このようなXMLドキュメントは、デバッグ時に非常に読みやすく、非常にコンパクトです。 そのため、出力でDOMDocumentオブジェクトを取得します。これは既にXSLTProcessorに渡すことができます。 XMLテキスト表現はどこにも現れず、どこでも解析されません。
拡張機能のインストール方法
拡張機能はCで記述されているため、GCCおよびphp5-src(またはphp5-devel)などのパッケージがインストールされているマシンでコンパイルする必要があります。 これはまったく怖いものではありません。
git clone https://github.com/DmitryKoterov/dom_varimport.git cd dom_varimport phpize ./configure 作る テストする make install#またはモジュール/ dom_varimport.soを手動でコピーします phpize --clean
「make install」ステップは省略できます。バイナリファイルモジュール/ dom_varimport.soを取得し、他のマシンを含め、PHP拡張機能(/ usr / lib / php5など)を含むディレクトリにコピーするだけです。 最後に、/ etc / php5 / conf.d / dom_varimport.iniの拡張機能を接続し、php5-fpmまたはapacheを再起動する必要があります。
拡張子= /usr/lib/php5/dom_varimport.so