Существует ли инструмент для расширения шаблонов документов XML с помощью XPath? - PullRequest
0 голосов
/ 29 августа 2018

Мне нравится писать 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 голосов
/ 29 августа 2018

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, или создайте свой собственный, если вы чувствуете необходимость добавить еще один в список.

...