可以做到(请记住 Dimitre,如果他询问 PHP,他几乎可以肯定仅限于 XSLT 1.0,而 FXSL 并不是他所追求的)。
首先,如果您打算自己编写 PHP,并将其用作文档处理流程的一部分,那么这可能是一个糟糕的语言选择。如果您只想使用您自己的一些 PHP 函数或有用的库函数(如 preg_replace)稍微扩展 XSL 的功能,因此您可以从您的 XSLT 中调用它们,如果您知道那些是绝对没问题的是事先准备好的:您将 PHP 函数导出到 XSLT,然后从那里调用它们。
但是,如果您要执行的代码对于每个文档都不同,那么它会变得更加困难(即,对于您尝试处理的包含 PHP 的文档中的处理指令,并且您希望在评估文档时使用 XSLT 脚本来执行处理指令)。尝试将这些函数分解为一个已知集合,然后从 PHP 中调用它们,但如果你不能并且仍然想尝试,那就是hackery。
(我假设您知道 PHP 将函数导出到 XSLT 的方式:您制作了一些普通的 PHP 函数,使用 registerPHPFunctions 将它们导出到 XSLT 脚本,然后它们只是将它们作为 XSLT 中的函数调用。这是一条老路;检查文档。)
回到从 XSLT 脚本执行文档 PI 中的 PHP 代码。
(我自己没有做过,但实施起来应该不那么难。)我相信不可能一次性完成。您必须调用 XSLT 处理器,并且每当您点击要运行的 PHP 时,放入一个标记标签(例如<phpmarker md5ofcode="php:md5(...)">
)并将代码传回给调用 PHP。哈克,但可能适合生活的方法是将它放在 xsl:message 中,并从 PHP 中的自定义处理程序中捕获它。
第一次运行结束后,对字符串进行一些操作,围绕您抓取的每个代码块创建一个包装函数,评估该字符串以创建函数,将它们导出到 XSLT 引擎,然后使用第二个 XSLT 脚本重新调用它将捕获标记节点,并在其内容上调用 PHP。
丑陋的?是的。你可能想解释为什么你会想要它,但它应该是可能的(通过两次)让它工作。
编辑:再读了几次你的问题,我越来越困惑。您确定要在您的 XSLT中添加 PI吗?PI 进入文档,解释如何处理它们。如果 PHP 打算放在 XSLT 文件中并且这不是拼写错误,我想你可能会有点困惑,它只是 PHP 的 registerPHPFunctions 的普通应用程序。您只需将 PHP 放在一个单独的文件中并从 XSLT 调用它,考虑到 XSLT 脚本在大到足以拆分为两个文件之前不必包含太多功能,这并不是一个巨大的负担。