Конвертировать шаблон в HTML помощью Aspose.HTML for Java

В этой статье описывается, как использовать 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// Populate an HTML template with structured JSON data using Java
 2
 3// Prepare a JSON data-source and save it to a file
 4String data =
 5        "{\n" +
 6        "   'FirstName': 'John',\n" +
 7        "   'LastName': 'Smith',\n" +
 8        "   'Address': {\n" +
 9        "       'City': 'Dallas',\n" +
10        "       'Street': 'Austin rd.',\n" +
11        "       'Number': '200'\n" +
12        "       }\n" +
13        "}";
14try (java.io.FileWriter fileWriter = new java.io.FileWriter("data-source.json")) {
15    fileWriter.write(data);
16}
17
18// Prepare an HTML Template and save it to a file
19String template =
20        "<table border=1>\n" +
21        "    <tr>\n" +
22        "        <th>Person</th>\n" +
23        "        <th>Address</th>\n" +
24        "    </tr>\n" +
25        "    <tr>\n" +
26        "        <td>{{FirstName}} {{LastName}}</td>\n" +
27        "        <td>{{Address.Street}} {{Address.Number}}, {{Address.City}}</td>\n" +
28        "    </tr>\n" +
29        "</table>\n";
30try (java.io.FileWriter fileWriter = new java.io.FileWriter("template.html")) {
31    fileWriter.write(template);
32}
33
34// Convert Template to HTML
35com.aspose.html.converters.Converter.convertTemplate(
36        "template.html",
37        new com.aspose.html.converters.TemplateData("data-source.json"),
38        new com.aspose.html.loading.TemplateLoadOptions(), "document.html"
39);

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

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

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

Close
Loading

Analyzing your prompt, please hold on...

An error occurred while retrieving the results. Please refresh the page and try again.

Subscribe to Aspose Product Updates

Get monthly newsletters & offers directly delivered to your mailbox.