使用 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, options 和 outputPath 。outputPath 是数据填充模板文件的保存路径。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 可简化对不一致命名的处理。