我读了这个问题/答案,但是没有提到它是一个“坏主意”,不幸的是,任何带有parse、xml和php字样的搜索查询通常都会产生有关使用 PHP 解析 XML 的信息(通过SimpleXML或其他)
简短的问题——通过在 XML 解析期间定位处理指令节点,将 PHP 嵌入到 XML 中,有条件地提取(和执行)它是一个可行的解决方案,还是我在树上一棵充满问题的树?
扩展——也许问题与 XML 关系不大,而更多地与选择适当的“元语言”有关,我可以对它执行查询以满足条件,并执行包含的 PHP 片段。XML 的结构、可移植性和简单性(尽管冗长)似乎是一个很好的候选者
。非常欢迎您对此类任务的首选语言提出建议。
无论如何,我一直在研究一个接受嵌入 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);
});
(代码只是一个例子,当然这里还有很多事情要做)
由于某些不可预见的边缘情况,是否尝试过这种方法导致失败?我不想在这样的解析器上投入大量时间,却发现它在某些情况下会严重失败。我很高兴从自己的错误中学习,但我更愿意从别人的错误中学习。