使用 Aspose.HTML for Java 将模板转换为 HTML

本文介绍了如何使用 Aspose.HTML for Java 根据模板创建 HTML 文档,并从 XML 或 JSON 等不同来源填充数据。使用内联表达式语法,您可以高效地将数据源与 HTML 模板相匹配,并动态生成内容。

Aspose.HTML for Java 提供了一组 convertTemplate() 方法,用于将 HTML 模板转换为 HTML 文档。这些方法需要几个参数(例如,模板和数据源的路径、TemplateLoadOptions 对象和结果 HTML 的路径),并返回填充后的 HTML 文档。

了解模板标记

HTML 模板是一个标准的 HTML 文件,其中包含一些特殊的内联表达式。这些表达式使用双大括号 {{ }} 将输入数据源中的数据映射到 HTML 文档的特定部分。在处理时,这些模板标记会按照以下规则替换为相应的数据值。

内联表达式语法

以下是支持的内联表达式语法列表。

{{ …}}- 数据绑定表达式

数据绑定表达式*用于根据数据源中包含的信息设置控制元素的值。

数据绑定表达式的基本语法如下:

{{ 数据绑定表达式 }}

下面的演示展示了如何使用数据绑定表达式从 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 directive expression 用于与 data-binding 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>

HTML 页面模板中的 foreach 指令表达式

HTML 模板

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>

请注意,目前的实现仅支持以下 HTML 元素的 foreach 指令表达式:DIV、OL、UL 和 TABLE。

数据来源

如前所述,数据源可以用 XML 和 JSON 格式表示。以下是这两种数据源的示例:

XML Data Source

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

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() 构造函数获取该数据文件的路径,并为 convertTemplate(sourcePath, data, options, outputPath) 方法创建一个数据对象(data)。
  2. 准备一个 HTML 模板并将其保存到文件中。convertTemplate() 方法将模板文件的路径作为参数(sourcePath)。
  3. 初始化 TemplateLoadOptions 类的实例,以确定模板和数据项名称是否匹配,无论大小写(options)。
  4. 调用 convertTemplate(sourcePath, data, options, outputPath) 方法并为其传递 sourcePath, data, optionsoutputPathoutputPath 是数据填充模板文件的保存路径。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 可简化对不一致命名的处理。
Subscribe to Aspose Product Updates

Get monthly newsletters & offers directly delivered to your mailbox.