Это можно сделать (помните, что Dimitre, если он спрашивает о PHP, он почти наверняка ограничен XSLT 1.0, а FXSL не совсем то, что ему нужно).
Во-первых, если вы планируете самостоятельно писать PHP и использовать его как часть потока обработки документов, это, вероятно, плохой выбор языка для этого. В случае, когда вы просто хотите расширить функциональность XSL крошечного бита с помощью нескольких функций PHP из ваших собственных или полезных библиотечных функций, таких как preg_replace, чтобы вы могли их вызывать из своего XSLT, вы абсолютно в порядке, если знаете, что эти заранее: вы экспортируете функции PHP в XSLT и просто вызываете их оттуда.
Если код, который вы хотите выполнить, отличается для каждого документа, однако, он становится сложнее (т.е. для обработки инструкций в документах, которые вы пытаетесь обработать, которые содержат PHP, и вы хотите, чтобы сценарий XSLT при оценке вашего документа выполните инструкции по обработке). Попробуйте и отбросьте функции в известный набор и просто вызовите их из PHP, но если вы не можете и хотите попробовать, это до хакера.
(Предполагаю, что вы знаете о способе экспорта PHP в XSLT: вы выполняете некоторые обычные функции PHP, вы экспортируете их в скрипт XSLT, используя registerPHPFunctions, и их просто называют их функциями внутри XSLT. -trodden path, проверьте документы.)
Назад к выполнению PHP-кода в PI вашего документа из сценария XSLT.
(Не делается сам, но не должен быть таким трудным для реализации.) Я считаю, что это невозможно сделать за один проход. Вы должны вызвать XSLT-процессор, и всякий раз, когда вы нажимаете PHP, который хотите запустить, введите маркерный тег (например, <phpmarker md5ofcode="php:md5(...)">
) и передайте код обратно вызывающему PHP. Хакки, но потенциально пригодные для жизни, заключались бы в том, чтобы поместить его в сообщение xsl: и поймать его из пользовательского обработчика в PHP.
Когда первый запуск завершен, выполните небольшую манипуляцию с строкой, чтобы сделать функцию обертки вокруг каждого блока кода, который вы захватили, eval эта строка, чтобы создать функции, экспортировать их в движок XSLT, а затем перезвонить с помощью второй скрипт XSLT, который будет котировать узлы маркера и вызывать PHP на их содержимое.
Уродливое? Да. Возможно, вы захотите объяснить, зачем вам это нужно, но должно быть возможно (через два прохода) заставить его работать.
Редактировать: Перечитав свой вопрос еще несколько раз, я смущаюсь. Вы уверены, что хотите PIs в своем XSLT? PI идут в документах, объясняя, как их обрабатывать. Если PHP предназначен для использования в XSLT-файле, и это не опечатка, я думаю, что вы можете быть немного смущены, и это просто обычное приложение для регистрации php PHPPHPFunctions. Вам просто нужно поместить PHP в отдельный файл и вызвать его из XSLT, что не является огромным бременем, поскольку сценарии XSLT не должны содержать много функций, прежде чем они будут достаточно большими, чтобы разделить на два файла.
Если вы используете XSL для шаблона, я хотел бы предложить вам использовать Smarty вместо. Он имеет лучшую производительность, и вы можете выполнить PHP в шаблоне. http://www.smarty.net/ – HoLyVieR
Это действительно не помогает нам обсуждать эту тему. Речь идет о XSLT. Я не знаю умного, но, как я вижу при первом впечатлении, это нечто совершенно другое. Благодарю вас. – ChrisBenyamin
Хороший вопрос (+1). См. Мой ответ для объяснения и возможных альтернативных решений. –