Это можно сделать (имейте в виду, что, если Димитр спрашивает о PHP, он почти наверняка ограничен XSLT 1.0, а FXSL не совсем то, что ему нужно).
Во-первых, если планируете писатьPHP и использование его как часть процесса обработки документов, вероятно, это плохой выбор языка для этого.В случае, когда вы просто хотите немного расширить функциональность XSL с помощью нескольких собственных функций PHP или полезных библиотечных функций, таких как preg_replace, так что вы можете вызывать их из своего XSLT, у вас все в порядке, если вы знаете, что это такоезаранее: вы экспортируете функции PHP в XSLT и просто вызываете их оттуда.
Если код, который вы хотите выполнить, отличается для каждого документа, он становится сложнее (т. е. для обработки инструкций в документах).вы пытаетесь обработать те, которые содержат PHP, и вы хотите, чтобы скрипт XSLT при оценке вашего документа выполнял инструкции обработки).Попробуйте выделить функции из известного набора и просто вызывать их из PHP, но если вы не можете и все еще хотите попробовать, дело до хакерства.
(я полагаю, вы знаете о способе PHPэкспорта функций в XSLT: вы создаете некоторые обычные функции PHP, вы экспортируете их в сценарий XSLT с помощью registerPHPFunctions, и они просто вызывают их как функции внутри XSLT. Это сложный путь; проверьте документы.)
Вернемся к выполнению PHP-кода в PI вашего документа из сценария XSLT.
(Не сделал сам, но не должен быть таким сложным для реализации.) Это невозможно сделать за один проход,Я верю.Вам нужно вызвать процессор XSLT, и всякий раз, когда вы нажимаете на PHP, который хотите запустить, вставьте маркерный тег (например, <phpmarker md5ofcode="php:md5(...)">
) и передайте код обратно вызывающему PHP.Хаки, но потенциально пригодный для использования - это поместить его в сообщение xsl: и перехватить его из пользовательского обработчика в PHP.
Когда первый запуск закончится, сделайте немного манипуляций со строками, чтобы создать оболочкуОбрабатывает каждый блок кода, который вы захватили, оценивает эту строку для создания функций, экспортирует их в механизм XSLT, а затем повторно вызывает второй сценарий XSLT, который будет отслеживать узлы маркера, и вызывать PHP для их содержимого.
Гадкий?Да.Возможно, вы захотите объяснить, почему вы этого хотите, но должна быть возможность (за два прохода) заставить его работать.
Редактировать : перечитав ваш вопрос еще несколько раз,Я расту в растерянности.Вы уверены, что хотите использовать PI в вашем XSLT ?ИП указывают в документах, объясняя, как они должны быть обработаны.Если PHP предназначен для включения в файл XSLT, и это не опечатка, я думаю, вы можете быть немного сбиты с толку, и это всего лишь простое ванильное приложение PHP registerPHPFunctions.Вам просто нужно поместить PHP в отдельный файл и вызвать его из XSLT, что не является огромным бременем, учитывая, что сценарии XSLT не должны содержать много функций, прежде чем они станут достаточно большими, чтобы разделиться на два файла.