我喜欢编写HTML,并且倾向于编写几乎没有JavaScript的扁平网站。我一直在围绕编写一种新的使用XPath和XMLNS引用其他文档的“语言”的想法。
我一直在想如何编写HTML,然后我将运行一个构建工具来扩展和构建完整文档。
有没有可以执行以下操作的工具?我宁愿重用或从已经存在的工具中学习。我怀疑我缺少一个已经完成类似功能的明显或通用工具。
通常,这就是我想要编写HTML的方式(或者我一直称它为HTMPL
,因为它是模板化的。)
<html xmlns:custom="card.htmpl">
<custom:card img="/path/to/image.jpg">
<title>Title content here</title>
This is the card
</custom:card>
</html>
<div class="card">
<img src="[[//card@img]]" />
<div class="title">The title is: [[//card/title/text()]]</div>
<div class="content">[[//card/text()]]</div>
</div>
删除了多余的空格
<html>
<div>
<img src="/path/to/image.jpg" />
<div class="title">The title is: Title content here</div>
<div class="content">This is the card</div>
</div>
</html>
答案 0 :(得分:1)
XSLT旨在完成这项工作。
XSLT有一个称为“简化样式表”的概念,该概念专门用于您需要的非常简单的模板的情况,但是很少使用简化样式表,因为大多数人发现它们最终需要完整的语言。
您的示例可以用XSLT 3.0(使用简化的样式表)编写,如下所示:
data.xml
<custom:card img="/path/to/image.jpg">
<title>Title content here</title>
This is the card
</custom:card>
template.xsl
<html xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xsl:version="3.0" expand-text="yes">
<div class="card">
<img src="{//card/@img}" />
<div class="title">The title is: {//card/title/text()}</div>
<div class="content">{//card/text()}</div>
</div>
</html>
但是,正如我所说的,使用XSLT的这种方式并未被证明很流行。
还有其他(非标准化)模板语言,例如Velocity和Freemarker。在https://en.wikipedia.org/wiki/Comparison_of_web_template_engines进行选择,如果您需要在列表中再添加一个,请自行设计。