我读this question/answer但是有没有它是一个“坏主意”的任何提及,可惜的话任何搜索查询解析,XML,并PHP通常会产生信息约(通过SimpleXML或任何)用PHP解析XML解析PHP嵌入到XML
短期问题 - 它是一个可行的解决方案中嵌入PHP的XML,提取(和执行)有条件地,通过在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);
});
(代码仅仅是一个例子,还有很多更怎么回事,当然)由于一些不可预见的 边缘情况
先后这种方法被尝试导致失败?我不想将大量时间投入到这样的解析器中,只是为了发现它在某些情况下会失败。我很高兴从自己的错误中吸取教训,但我更愿意向别人学习。
确保您在XML中嵌入PHP周围使用<![CDATA [...]]>,并查看使用类似技术的其他工具,如phing – 2011-12-24 15:44:09
感谢@MarkBaker-I我们一定会研究Phing的文档/源代码(*如果你知道使用这种技术的任何其他工具,我很想知道它们)*关于使用'<![CDATA]'块进行封装;那不会否定处理指令解析技术? – Dan 2011-12-24 15:47:11
由于php是基于字符串的,所以输出非常容易变为无效的XML。您可能想要尝试解析生成的字符串,或者强制PHP返回节点而不是字符串。 – 2011-12-24 15:57:18