首先,
HTML是一个节点树.这不仅仅是一个文本.
但是,大多数模板引擎处理它们的输入和输出,因为它只是一个文本;他们不关心他们的标签,他们的{$foo}和周围发生了什么;他们也不关心他们输出什么.有时它们碰巧产生了正确的html,但这只是巧合;他们没有达到目的,他们想要的只是用他们的评价来取代文本流中的一些有趣的标记.
有一些模板引擎会将其输出视为一组节点;想到XSLT和Haml.对于某些任务,这具有优势:例如,您可以自动重新格式化(例如,删除所有空文本节点;自动缩进;自动换行).除非您使用可以破坏该操作的严格操作子集,否则结果将保证为正确的xml / sgml.此外,这样的模板引擎会在文本节点和属性中自动引用字符串,因为它严格知道您是在编写属性还是文本节点.
此外,它可以有条件地从输出中删除节点,因为它知道它的开始和结束位置,这很有用,并且可以执行其他非平凡的节点操作.
你可能不喜欢XSLT的动词或功能,但是你的模板是xmllint-able XML,并且你的输出是一个很好的sgml / xml,这是有帮助的.
所以问题是:您知道哪些模板引擎将其输出视为一组正确的节点,而不仅仅是非结构化文本?
我知道XSLT,Haml和一些基于python的晦涩的. Moar!