HTML es un árbol de nodos, antes de todo. No es solo un texto.¿Qué lenguajes de plantillas dan como resultado HTML * como un árbol de nodos *?
Sin embargo, la mayoría de los motores de plantillas manejan su entrada y salida, ya que solo era un texto; no les importa lo que sucede alrededor de sus etiquetas, sus {$foo}
y <% bar() %>
; tampoco les importa qué están produciendo. A veces producen un html correcto, pero eso es solo una coincidencia; no buscaban eso, todo lo que querían era reemplazar algunas marcas divertidas en el flujo de texto con su evaluación.
Existen algunos motores de plantillas que tratan su salida como un conjunto de nodos; XSLT y Haml vienen a la mente. Para algunas tareas, esto tiene sus ventajas: por ejemplo, puede reformatear automáticamente (como, eliminar todos los nodos de texto vacíos, sangría automática, ajuste de palabras). Se garantiza que el resultado es un xml/sgml correcto a menos que use un subconjunto estricto de operaciones que pueda romper eso. Además, dicho motor de plantillas cita automáticamente cadenas, de forma diferente en nodos de texto y en atributos, porque sabe estrictamente si está escribiendo un atributo o un nodo de texto. Además, puede eliminar condicionalmente un nodo de la salida porque sabe dónde comienza y termina, lo cual es útil, y realiza otras operaciones de nodo no triviales.
Puede que no le guste XSLT por su verbosidad o funcionalidad, pero es muy útil que su plantilla sea xmllint-able XML, y su resultado sea un buen sgml/xml.
Así que la pregunta es: ¿Qué motores de plantillas conoce que tratan su salida como un conjunto de nodos correctos, no solo como un texto no estructurado? Conozco XSLT, Haml y algunos oscuros basados en python. ¡Moar!
-1, bastante snarky. – cgp