使用 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
如果您的情况涉及创建模板和即时指定数据,您必须遵循几个步骤:
- 准备一个 JSON 或 XML 数据源并将其保存到文件中。TemplateData() 构造函数获取该数据文件的路径,并为
convertTemplate(sourcePath, data, options, outputPath)方法创建一个数据对象(data)。 - 准备一个 HTML 模板并将其保存到文件中。convertTemplate() 方法将模板文件的路径作为参数(
sourcePath)。 - 初始化 TemplateLoadOptions 类的实例,以确定模板和数据项名称是否匹配,无论大小写(options)。
- 调用
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);技术建议
- 始终验证数据源格式(XML/JSON)并确保与模板标记一致,以避免不匹配。
- 使用
TemplateLoadOptions.NamesAreCaseSensitive 控制数据绑定过程中的大小写敏感性。如果值为
true,匹配将区分大小写;如果值为false,字符大小写将被忽略。默认值为true。将其设置为false可简化对不一致命名的处理。