关于项目中使用HTML模板与XML模板的比较

来源:互联网 发布:数据决策系统 编辑:程序博客网 时间:2024/06/06 18:01

经常我们做项目需要用到动态构造HTML的功能,这个功能或者用在展示页面,或者用在发送的邮件主体里面。

最常用的做法,我们是采用模板替换的方式,也就是说在HTML中插入一个关键字,然后将关键字替换为我们要构造的HTML代码,最后合成一个整体HTML。

譬如:

 

接着构造[#Temp]模板的HTML TR代码,并替换,形成一整个HTML文档。

当然,你也可以将此HTML的代码另存为一个HTML文件,当要构造HTML的时候,直接从HTML文件读取HTML文档代码并替换[#Temp]模板。

这种处理方式一个比较方便的地方就是快捷,不用太麻烦的构造页面。但是这种方式有一个缺点,就是当替换的时候需要全文检索,这样当替换的关键字比较多的时候会带来的性能影响。

譬如:

这里还只有8列,当有几十个列,上百个列呢?性能方面那就体现的比较明显了。

 

所以,这里我推荐一种方式,就是标题上面所说的XML模板方式。

原理:通过XML与XSL配合来构造HTML模板。我展示一个项目实战中的例子。

一. 首先,我们建立一个XML文件EmailTemp.xml:

二.接着,我们建立一个XSL文件EmailTemp.xsl:

注:

<xsl:value-of> 元素用于提取某个选定节点的值。用于提取某个选定节点的值,并把值添加到转换的输出流中。
<xsl:for-each> 元素允许您在 XSLT 中进行循环。可用于选取指定的节点集中的每个 XML 元素。
select 属性的值是一个 XPath 表达式。此表达式的工作方式类似于定位某个文件系统,在其中正斜杠可选择子目录。

 

三.预览XML文件,并调整XSL的样式。一切都到位之后,就可以开始在程序中控制给XML模板添加数据。或者增加XML节点或者替换XML的节点值。这一部分,就相当于我们在HTML模板中构造[#Temp]

对应的TR。

1. 加载XML:

注:ExtendedData代表XML存入数据库中后,从数据库中读取出来的XML文档字符串。

 

2. 取得XML中的节点:

3. 给节点添加子节点,这里相当于构造HTML模板中的TR:

4. 设置其他节点的值:

四.将XML使用XSL的样式转换为流,并将输出流处理为HTML字符串。

注:这里我们可以直接读取XML与XSL文件,也可以先将XML与XSL文件内容预先存取到数据库中然后再读取,我们项目采取的后者。

因为XSL头文件可以共享:

   

 

XML模板的这种方式,其优点就是程序解析效率高,不用到冗长的HTML文档字符串中检索关键字,我们只需要添加节点,修改节点就成。

还有一个优点就是,XML文档形成之后,可以随时预览。虽然使用HTML文件通过替换关键字并重新写入HTML文件的方式也可以达到,但是XML追加或者替换了节点直接保存的效率会比重新写入HTML文件的效率更高些。

原创粉丝点击