HTML-шаблон – Конвертировать шаблон в HTML

В этой статье описывается, как использовать Aspose.HTML for Java для создания HTML-документа на основе шаблона (HTML template) и заполнения его данными из различных источников, таких как XML или JSON. Используя синтаксис встроенных выражений, вы можете эффективно сопоставлять источники данных с вашим шаблоном HTML и динамически генерировать контент.

Aspose.HTML for Java предлагает набор методов convertTemplate(), которые используются для преобразования шаблона HTML в документ HTML. Методы принимают несколько параметров (например, пути к шаблону и источнику данных, объект TemplateLoadOptions и путь к результату HTML) и возвращают заполненный HTML-документ.

Понимание разметки шаблона

HTML-шаблон (HTML template) – это стандартный HTML-файл, содержащий некоторые специальные встроенные выражения. В этих выражениях используются двойные фигурные скобки {{ }} для сопоставления данных из источника входных данных с определенными частями HTML-документа. При обработке эти маркеры шаблона заменяются соответствующими значениями данных в соответствии с приведенными ниже правилами.

Синтаксис встроенных выражений

Ниже приведен список поддерживаемого синтаксиса встроенных выражений.

{{ … }} – выражение привязки данных

Выражение привязки данных (data-binding expression) используется для установки значений элемента управления на основе информации, содержащейся в источнике данных.

Ниже приведен основной синтаксис выражения привязки данных:

{{ выражение привязки данных }}

В следующей демонстрации показано, как использовать выражение привязки данных для получения информации из источника данных XML.

Источник данных XML

1<Data>
2<FirstName>John</FirstName>
3<LastName>Doe</LastName>
4<Address>
5    <City>Chicago</City>
6    <Street>Oakmound Drive</Street>
7    <Number>100</Number>
8</Address>
9</Data>

Выражение привязки данных в шаблоне HTML-страницы:

HTML-шаблон

Это пример шаблона HTML, который использует встроенные выражения для привязки данных. Шаблон включает в себя таблицу с двумя столбцами для «Person» и «Address». В ячейках столбца «Person» отображаются значения {{FirstName}} и {{LastName}} из источника данных. В ячейках столбца «Address» отображаются значения {{Address.Street}} {{Address.Number}} и {{Address.City}}. Синтаксис фигурных скобок используется для обозначения встроенного выражения.

 1<table border=1>
 2    <tr>
 3        <th>Person</th>
 4        <th>Address</th>
 5    </tr>
 6    <tr>
 7        <td>{{FirstName}} {{LastName}}</td>
 8        <td>{{Address.Street}} {{Address.Number}}, {{Address.City}}</td>
 9    </tr>
10</table>

{{#foreach … }} – выражение директивы foreach

Выражение директивы foreach (foreach directive expression) используется для итерации по списку элементов в сочетании с выражением привязки данных.

Следующие примеры показывают, как получить всех лиц из источника данных и заполнить шаблон:

Источник данных XML

 1<Data>
 2    <Persons>
 3        <Person>
 4                <FirstName>John</FirstName>
 5                <LastName>Doe</LastName>
 6                <Address>
 7                        <Number>100</Number>
 8                        <Street>Oakmound Drive</Street>
 9                        <City>Chicago</City>
10                </Address>
11                <Phone1>773-349-7747</Phone1>
12                <Phone2>708-252-9790</Phone2>
13        </Person>
14        <Person>
15                <FirstName>Jack</FirstName>
16                <LastName>Fox</LastName>
17                <Address>
18                        <Number>355</Number>
19                        <Street>Haul Road</Street>
20                        <City>San Francisco</City>
21                </Address>
22                <Phone1>650-942-7641</Phone1>
23            </Person>
24            <Person>
25                <FirstName>Sherlock</FirstName>
26                <LastName>Holmes</LastName>
27                <Address>
28                        <Number>45</Number>
29                        <Street>Baker str.</Street>
30                        <City>London</City>
31                </Address>
32                <Phone1>012-5146-564</Phone1>
33        </Person>
34    </Persons>
35</Data>

Foreach directive expression в шаблоне HTML-страницы:

HTML Template

Атрибут data_merge указывает, что источником данных является список объектов, и таблица должна повторяться для каждого объекта в списке. Выражения внутри шаблона, такие как {{FirstName}}, {{LastName}}, {{Address.Street}} и {{Address.Number}}, указывают поля из источника данных, которые должны быть вставлены в соответствующие ячейки таблицы.

 1<table border=1 data_merge='{{#foreach Persons.Person}}'>
 2    <tr>
 3        <th>Person</th>
 4        <th>Address</th>
 5    </tr>
 6    <tr>
 7        <td>{{FirstName}} {{LastName}}</td>
 8        <td>{{Address.Street}} {{Address.Number}}, {{Address.City}}</td>
 9    </tr>
10</table>

Обратите внимание, что текущая реализация поддерживает foreach directive expression только для следующего списка элементов HTML: DIV, OL, UL и TABLE.

Источник данных

Как упоминалось ранее, источник данных может быть представлен в форматах XML и JSON. Ниже приведены примеры обоих источников данных:

Источник данных XML

1 <Data>
2    <FirstName>John</FirstName>
3    <LastName>Doe</LastName>
4    <Address>
5        <City>Chicago</City>
6        <Street>Oakmound Drive</Street>
7        <Number>100</Number>
8    </Address>
9</Data>

Источник данных JSON

1{
2     "FirstName": "John",
3     "LastName": "Doe",
4     "Address": {
5         "City": "Chicago",
6         "Street": "Oakmound Drive",
7         "Number": "100"
8     }
9 }

Преобразование шаблона в HTML

Если ваш случай предполагает указание данных и создание шаблона на лету, вам необходимо выполнить несколько шагов:

  1. Подготовьте источник данных JSON или XML и сохраните его в файл. Конструктор TemplateData() берет путь к этому файлу данных и создает объект данных (data) для метода convertTemplate(sourcePath, data, options, outputPath), который мы будем использовать.
  2. Подготовьте HTML-шаблон и сохраните его в файл. Метод сonvertTemplate() примет путь к файлу шаблона в качестве параметра (sourcePath).
  3. Инициализируйте экземпляр класса TemplateLoadOptions, чтобы определить, совпадают ли имена шаблона и элемента данных, независимо от регистра или нет (options).
  4. Вызовите метод convertTemplate(sourcePath, data, options, outputPath) и передайте ему sourcePath, data, options и outputPath. outputPath – путь для сохранения заполненного данными конечного файла HTML. Метод convertTemplate() заменяет выражения в шаблоне значениями из источника данных, создавая заполненный HTML-документ.
 1// Prepare a JSON data-source and save it to the file.
 2String data =
 3        "        {\n" +
 4        "        'FirstName': 'John',\n" +
 5        "        'LastName': 'Smith',\n" +
 6        "        'Address': {\n" +
 7        "            'City': 'Dallas',\n" +
 8        "            'Street': 'Austin rd.',\n" +
 9        "            'Number': '200'\n" +
10        "            }\n" +
11        "        }\n";
12try (java.io.FileWriter fileWriter = new java.io.FileWriter("data-source.json")) {
13    fileWriter.write(data);
14}
15
16// Prepare an HTML Template and save it to the file.
17String template =
18        "<table border=1>\n" +
19        "    <tr>\n" +
20        "        <th>Person</th>\n" +
21        "        <th>Address</th>\n" +
22        "    </tr>\n" +
23        "    <tr>\n" +
24        "        <td>{{FirstName}} {{LastName}}</td>\n" +
25        "        <td>{{Address.Street}} {{Address.Number}}, {{Address.City}}</td>\n" +
26        "    </tr>\n" +
27        "</table>\n";
28try (java.io.FileWriter fileWriter = new java.io.FileWriter("template.html")) {
29    fileWriter.write(template);
30}
31
32// Invoke Converter.ConvertTemplate in order to populate 'template.html' with the data-source from 'data-source.json' file
33com.aspose.html.converters.Converter.convertTemplate(
34        "template.html",
35        new com.aspose.html.converters.TemplateData("data-source.json"),
36        new com.aspose.html.loading.TemplateLoadOptions(), "document.html"
37);

Технические рекомендации

  1. Всегда проверяйте формат источника данных (XML/JSON) и обеспечивайте согласованность с маркерами шаблона, чтобы избежать несоответствий.

  2. Используйте TemplateLoadOptions.NamesAreCaseSensitive для управления учетом регистра во время привязки данных. Если значение равно true, сопоставление чувствительно к регистру; если оно равно false, регистр символов будет игнорироваться. Значение по умолчанию – true. Установка значения false упрощает обработку противоречивых имен.

Subscribe to Aspose Product Updates

Get monthly newsletters & offers directly delivered to your mailbox.