HTML 模板 – 如何使用 C# 进行填充

本文介绍了如何基于模板创建 HTML 文档,并从数据源填充该文档。Aspose.HTML for .NET 提供了内联表达式语法,可用于模板和各种数据源类型(如 XML 和 JSON)。

模板标记

HTML 模板是一个普通的 HTML 文件,其中包含一些特殊的内联表达式,用于指定输入数据源与 HTML 页面标记的映射关系。这些内联表达式使用双曲括号符号。在模板处理过程中,模板标记将按照下述规则用相应的数据值替换。

内联表达式

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

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

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

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

{{ 数据绑定表达式 }}

下面的演示展示了如何使用数据绑定表达式从 XML 数据源获取信息:

XML Data Source

1<Data>
2    <FirstName>John</FirstName>
3    <LastName>Doe</LastName>
4    <Address>
5        <City>Dallas</City>
6        <Street>Austin rd.</Street>
7        <Number>200</Number>
8    </Address>
9</Data>

HTML 页面模板中的数据绑定表达式:

HTML 模板

这是一个使用内联表达式绑定数据的 HTML 模板示例。该模板包含一个表格,其中有 “Person” 和 “Address” 两列。“Person” 列中的单元格显示数据源中 {{FirstName}} 和 {{LastName}} 的值。“Address” 列中的单元格显示 {{Address.Street}} 和 {{Address.Number}} 的值。{{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指令表达式与* 数据绑定表达式*相结合,用于遍历元素列表。

下面的演示展示了如何从 XML 数据源获取所有人员并填充模板:

XML Data Source

 1 <Data>
 2     <Persons>
 3         <Person>
 4             <FirstName>John</FirstName>
 5 			<LastName>Doe</LastName>
 6             <Address>
 7                 <Number>200</Number>
 8                 <Street>Austin rd.</Street>
 9                 <City>Dallas</City>
10             </Address>
11             <Phone1>345-345-34-55</Phone1>
12             <Phone2>345-555-09-09</Phone2>
13         </Person>
14         <Person>
15             <FirstName>Jack</FirstName>
16             <LastName>Fox</LastName>
17             <Address>
18                 <Number>25</Number>
19                 <Street>Broadway</Street>
20                 <City>New York</City>
21             </Address>
22             <Phone1>081-544-12-15</Phone1>
23         </Person>
24         <Person>
25             <FirstName>Sherlock</FirstName>
26             <LastName>Holmes</LastName>
27             <Address>
28                   <Number>65</Number>
29                   <Street>Baker str.</Street>
30                   <City>London</City>
31             </Address>
32             <Phone1>012-5344-334</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>Dallas</City>\
6         <Street>Austin rd.</Street>\
7         <Number>200</Number>\
8     </Address>
9 </Data>

JSON Data Source

1{
2     "FirstName": "John",
3     "LastName": "Doe",
4     "Address": {
5         "City": "Dallas",
6         "Street": "Austin rd.",
7         "Number": "200"
8     }
9 }

用几行代码将模板转换为 HTML

准备好 HTML 模板后,只需几行代码即可在 C# 应用程序中将模板转换为 HTML!为此,您需要向 ConvertTemplate() 方法 (sourcePathdataoptionsoutputPath) 传递所需的参数。

1// Convert Template to HTML using C#
2
3// Convert template to HTML
4Converter.ConvertTemplate(
5    Path.Combine(DataDir, "template.html"),
6    new TemplateData(Path.Combine(DataDir, "data-source.json")),
7    new TemplateLoadOptions(),
8    Path.Combine(OutputDir, "template-with-single-line.html")
9);

上面的代码片段展示了如何使用 ConvertTemplate() 方法根据模板创建 HTML 文档,并从 JSON 数据源填充数据。该方法需要四个参数:模板文件的路径、数据源、模板的加载选项以及保存输出 HTML 文档的路径。生成的文档将使用内联表达式语法,用数据源中的数据填充模板。

有关如何将模板转换为 HTML 的详细信息,请访问 将模板转换为 HTML

Subscribe to Aspose Product Updates

Get monthly newsletters & offers directly delivered to your mailbox.