有没有使用XPath扩展XML文档模板的工具?

时间:2018-08-29 05:37:06

标签: html xml xpath templating

我喜欢编写HTML,并且倾向于编写几乎没有JavaScript的扁平网站。我一直在围绕编写一种新的使用XPath和XMLNS引用其他文档的“语言”的想法。

我一直在想如何编写HTML,然后我将运行一个构建工具来扩展和构建完整文档。

有没有可以执行以下操作的工具?我宁愿重用或从已经存在的工具中学习。我怀疑我缺少一个已经完成类似功能的明显或通用工具。

示例

通常,这就是我想要编写HTML的方式(或者我一直称它为HTMPL,因为它是模板化的。)

index.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>

card.htmpl

<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>

1 个答案:

答案 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进行选择,如果您需要在列表中再添加一个,请自行设计。