Я прочитал этот вопрос / ответ однако не было никакого упоминания о том, что это "плохая идея", и, к сожалению, ни один поисковый запрос со словами parse , xml и php обычно дают информацию о синтаксическом анализе XML с помощью PHP ( через SimpleXML или любого другого )
Короткий вопрос - Является ли это жизнеспособным решением для встраивания PHP в XML, его извлечения ( и выполнения ) условно, путем нацеливания на узлы инструкций обработки во время синтаксического анализа XML, или я лаю дерево чреватос проблемами?
Расширение - Возможно, проблема не столько в XML, сколько в выборе подходящего «метаязыка», для которого я могу выполнять запросы для удовлетворения условий, ивыполнить содержащийся фрагмент PHP.XML казался хорошим кандидатом для своей структуры, переносимости и простоты ( несмотря на многословность )
Я подумал о том, чтобы просто вернуться к обычному PHP, использовать массивы в качестве структуры данных, но любые структурированные метаданные.языка будет достаточно как обертка.Предложения вашего предпочтительного языка для такой задачи приветствуются.
В любом случае, я работаю над механизмом, который принимает XML-файлы со встроенным PHP.Я анализирую данные 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>
Я могу разобрать PHP, установив обратный вызов с xml_set_processing_instruction_handler()
, что в конечном итоге делает:
xml_set_processing_instruction_handler($parser, function($parser, $target, $func)
{
// obtain some parameters into $data
call_user_func(eval("return {$func};"), $data);
});
(код является только примером, здесь, конечно, происходит гораздо больше )
Была ли предпринята попытка такого подхода, приводящая к сбою из-за непредвиденного крайнего случая?Я не хочу тратить много времени на такой синтаксический анализатор только для того, чтобы выяснить, что он при некоторых обстоятельствах потерпит неудачу.Я счастлив учиться на собственных ошибках, но я бы предпочел учиться на чужих.