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
Если ваш случай предполагает указание данных и создание шаблона на лету, вам необходимо выполнить несколько шагов:
- Подготовьте источник данных JSON или XML и сохраните его в файл. Конструктор
TemplateData() берет путь к этому файлу данных и создает объект данных (
data
) для методаconvertTemplate(sourcePath, data, options, outputPath)
, который мы будем использовать. - Подготовьте HTML-шаблон и сохраните его в файл. Метод сonvertTemplate() примет путь к файлу шаблона в качестве параметра (
sourcePath
). - Инициализируйте экземпляр класса
TemplateLoadOptions, чтобы определить, совпадают ли имена шаблона и элемента данных, независимо от регистра или нет (
options
). - Вызовите метод
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);
Технические рекомендации
Всегда проверяйте формат источника данных (XML/JSON) и обеспечивайте согласованность с маркерами шаблона, чтобы избежать несоответствий.
Используйте TemplateLoadOptions.NamesAreCaseSensitive для управления учетом регистра во время привязки данных. Если значение равно
true
, сопоставление чувствительно к регистру; если оно равноfalse
, регистр символов будет игнорироваться. Значение по умолчанию –true
. Установка значенияfalse
упрощает обработку противоречивых имен.