模板引擎 - 正则表达式、DOMDocument 和 xpath 或其他?
Template engine - regex, DOMDocument and xpath or something else?
我正在考虑通过创建模板引擎来使用 PHP 解析模板的最佳方法。模板可能包含 HTML、CSS 和 JavaScript - 但没有 PHP 代码。我知道,那里有很多引擎...但我想尝试构建自己的引擎。
这是一个简单的模板文件示例。
<!DOCTYPE html>
<html>
<head>
<title>{printtitle/}</title>
<head>
<body>
{hello attribute="world"/} <!-- template tags could contain attributes -->
<!-- written as below should return the div within the tags. -->
{innerhtml}
<div class="someclass">Some content</div>
{/innerhtml}
</body>
</html>
我已经阅读并看过有关如何使用正则表达式成功解析模板标签(如上面的标签)的示例。但是,阅读有关这些解决方案的评论让我认为创建简单的自定义模板引擎的正则表达式不是可行的方法。但我一直没有弄清楚其中的原因。太慢了?
我对 DOMDocument 和 Xpath 不是很熟悉。但这是一种更现代的解析 HTML 模板的方法,如上例所示吗?
我希望得到一些澄清,让我在这里选择正确的道路。
您正在创建自定义文档格式/语言,因此 DOMDocument、Xpath 或其他预定义的解析器是不可能的。答案取决于您的要求。
如果您的模板语言只是简单地用值替换模板标记,并且不允许嵌套,正则表达式将很容易实现并且运行良好。
如果您的模板有任何更复杂的内容,例如循环、函数调用或嵌套,您将需要使用词法分析器正式定义您的规则,例如 Phlexy.
我正在考虑通过创建模板引擎来使用 PHP 解析模板的最佳方法。模板可能包含 HTML、CSS 和 JavaScript - 但没有 PHP 代码。我知道,那里有很多引擎...但我想尝试构建自己的引擎。
这是一个简单的模板文件示例。
<!DOCTYPE html>
<html>
<head>
<title>{printtitle/}</title>
<head>
<body>
{hello attribute="world"/} <!-- template tags could contain attributes -->
<!-- written as below should return the div within the tags. -->
{innerhtml}
<div class="someclass">Some content</div>
{/innerhtml}
</body>
</html>
我已经阅读并看过有关如何使用正则表达式成功解析模板标签(如上面的标签)的示例。但是,阅读有关这些解决方案的评论让我认为创建简单的自定义模板引擎的正则表达式不是可行的方法。但我一直没有弄清楚其中的原因。太慢了?
我对 DOMDocument 和 Xpath 不是很熟悉。但这是一种更现代的解析 HTML 模板的方法,如上例所示吗?
我希望得到一些澄清,让我在这里选择正确的道路。
您正在创建自定义文档格式/语言,因此 DOMDocument、Xpath 或其他预定义的解析器是不可能的。答案取决于您的要求。
如果您的模板语言只是简单地用值替换模板标记,并且不允许嵌套,正则表达式将很容易实现并且运行良好。
如果您的模板有任何更复杂的内容,例如循环、函数调用或嵌套,您将需要使用词法分析器正式定义您的规则,例如 Phlexy.