私はこの質問/回答を読みましたが、それが「悪い考え」であるという言及はありませんでした。残念ながら、parse、xml、およびphpという単語を含む検索クエリは、通常、PHP を使用した XML の解析に関する情報を生成します ( SimpleXMLなどを介して) 。
短い質問- PHP を XML に埋め込み、条件付きで抽出 (および実行) することは実行可能な解決策でしょうか。
拡張-- おそらく、この問題は XML とはあまり関係がなく、適切な「メタ言語」を選択することに関係しています。これに対して、クエリを実行して条件を満たし、含まれている PHP スニペットを実行できます。XML は、その構造、移植性、および単純さ (冗長性にもかかわらず)の優れた候補のように思え
ました。データ構造として配列を使用して、単純な PHP にフォールバックすることを検討しましたが、構造化されたメタ言語であればラッパーとして十分です。このようなタスクに適した言語の提案は大歓迎です。
とにかく、私は PHP が埋め込まれた XML ファイルを受け入れるエンジンに取り組んできました。XML データを解析し (私の場合は SAX コールバックを使用)、XML データの「クエリ」を支援する入力に応じて、適切な埋め込み PHP を取得して実行しeval()
ます。
(私は知っています;「eval()
答えが である場合、あなたはほぼ間違いなく間違った質問をしている.」しかし、私は現時点ではそれについて心配していません)
だから私は次のようなものになります:
<root>
<node>
<parameters>
<!-- some stuff -->
</parameters>
<callback>
<?php
function(){
// do some stuff
};
?>
</callback>
</node>
<node>
<parameters>
<!-- some other stuff -->
</parameters>
<callback>
<?php
function(){
// do some other stuff
};
?>
</callback>
</node>
</root>
xml_set_processing_instruction_handler()
最終的に行うコールバックを設定することで、PHP を解析できます。
xml_set_processing_instruction_handler($parser, function($parser, $target, $func)
{
// obtain some parameters into $data
call_user_func(eval("return {$func};"), $data);
});
(コードは単なる例です。もちろん、ここではさらに多くのことが行われています)
このアプローチを試みた結果、予期しないエッジ ケースが原因で失敗しましたか? このようなパーサーに多くの時間を費やして、状況によっては見事に失敗することを知りたくはありません。私は自分の過ちから学ぶことができてうれしいですが、他の人の過ちから学ぶほうがずっとましです。