某些时候需要生成HTML展现数据,考虑过XML加XSL方法吗?比如,以html邮件的方式发送一些数据。

本文通过两个已经存在的文件,xml文件和xsl文件演示如何将其转换成HTML。

首先,准备XML文件,这里为了演示,随便定义了一组数据。这些定义好的数据用于后面套入到对应的xsl模板中。

<ROOT>

<ASPNETX Username="dudu" City="Shanghai" Cool="70" />

<ASPNETX Username="Bill" City="Meiguo" Cool="100" />

<ASPNETX Username="Gates" City="Meiguo" Cool="100" />

<ASPNETX Username="Aobama" City="Meiguo" Cool="80" />

<ASPNETX Username="aspnetx" City="Beijing" Cool="60" />

<ASPNETX Username="Geo" City="USA.East" Cool="20" />

<ASPNETX Username="Mike" City="USA.West" Cool="30" />

<ASPNETX Username="Jim" City="Jilin" Cool="90" />

<ASPNETX Username="Tim" City="Hebei" Cool="10" />

<ASPNETX Username="Ada" City="Big Apple" Cool="10" />

<ASPNETX Username="Jill" City="unknown" Cool="50" />

</ROOT>

XML数据文件可以自己组织格式,因为在xsl模板中是支持x-path查询的。

然后,准备XSL文件:

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:msxsl="urn:schemas-microsoft-com:xslt" exclude-result-prefixes="msxsl">

<xsl:output method="html" indent="yes"/>

<xsl:template match="/">

<table align="left" cellpadding="2" cellspacing="5">

<tr>

<td style="font-family: Verdana; font-size: 15px; font-weight: bold;">User in cnblogs:</td>

</tr>

<tr>

<td style="font-family: Verdana; font-size: 10px;">

<table width="500px" align="left" cellpadding="2" cellspacing="0" style="font-family: Verdana; font-size: 10px;">

<tr>

<td bgcolor="#808080">

<font color="#FFFFFF">

<b>User name</b>

</font>

</td>

<td bgcolor="#808080">

<font color="#FFFFFF">

<b>City</b>

</font>

</td>

<td bgcolor="#808080">

<font color="#FFFFFF">

<b>Cool</b>

</font>

</td>

</tr>

<xsl:for-each select="ROOT/ASPNETX">

<tr>

<td style="border: 1px solid #808080">

<xsl:value-of select="@Username"/>

</td>

<td style="border: 1px solid #808080">

<xsl:value-of select="@City"/>

</td>

<td style="border: 1px solid #808080">

<xsl:value-of select="@Cool"/>

</td>

</tr>

</xsl:for-each>

</table>

</td>

</tr>

</table>

</xsl:template>

</xsl:stylesheet>

在模板文件之中,xsl:template之间就是要展现的html模板的内容。

xsl:value-of对应数据区域,select后跟x-path查询。

Xsl:for-each枚举得到的集合。

通过以上两个标签的占位,xml的数据就会根据其定义出现在对应的位置。

Xml和xsl都准备好,最后,准备c#代码,下面的代码将把模板xsl和数据xml加载进来,然后把html内容输出成一个string字符串:

static void TestXls()

{

//数据文件

XmlReader _xmlxml = XmlReader.Create("xmldata.xml");

//模板文件

XmlReader _xmlxsl = XmlReader.Create("xsldata.xml");

//实例化转换对象

XslCompiledTransform xslct = new XslCompiledTransform();

xslct.Load(_xmlxsl);

MemoryStream ms = new MemoryStream();

XmlTextWriter xmltxtWr = new XmlTextWriter(ms, null);

//开始转换,并且将结果保存到writer中。

xslct.Transform(_xmlxml, xmltxtWr);

//读取结果

StreamReader st = new StreamReader(ms);

ms.Seek(0, SeekOrigin.Begin);

string TransformedHTML = st.ReadToEnd();

Console.WriteLine(TransformedHTML);

}

在.net下提供了现成的转换对象,XslCompiledTransform。通过Load方法加载xsl文件后,就可以调用Transform方法对xml进行转换了。

Xmldata.xml和xsldata.xml文件如果在项目中,记得设置其copy to output directory。默认这两个文件是不输出到bin目录的,所以如果不设置会导致程序无法加载到相应的xml和xsl文件。

实际操作的时候,需要自己先组织好html部分的内容,尽量不要用网页设计工具,因为这样会生成很多的垃圾标签,所以最好自己手写。然后在适当的位置加上<xsl:xxx />标签,最后放到xsl文件中。

做好xsl模板后,建议先自己调试一下看看能否搭配xml正常的输出数据,偶尔有一些不符合规范的地方程序会报错。

Xml的数据最常用的来源就是sql语句加for xml auto了,此时需要注意模板里的x-path查询也要根据xml结果做相应的变化。

由于visual studio在调试的时候,查看字符串变量支持文本模式和html模式,所以在实际开发的时候调试起来会方便的很多。

需要注意:

模板中不能出现&这样的字符,所以&nbsp;这样的要处理掉。

XML做x-path查询是区分大小写的,比如Root和root是无法匹配上的。

示例项目下载

环境:Visual Studio 2010

转载于:https://www.cnblogs.com/aspnetx/archive/2010/07/09/1774151.html

使用XML及XSL生成简单HTML相关推荐

  1. XML和XSL生成类PowerPoint组织结构图

    XML和XSL生成类PowerPoint组织结构图 近日我正在潜心初学XML和XSL的相关技术,一日,漫漫长夜,无心睡眠,突心血来潮,想一试自己这段时间所学.因有感每日所用XML数据格式的层次性,总觉 ...

  2. ASP.NET MVC 生成简单的 xml 权限结构

    ASP.NET MVC 生成简单的 xml 权限结构 当我的一个项目到尾声时,发现系统很多模块权限有遗漏.部分模块权限遗漏是由于前期开发速度太快,开发人员未先给模块加权限而后再编写该模块功能代码.当我 ...

  3. python批量生成,用python批量生成简单的xml文档

    最近生成训练数据时,给一批无效的背景图片生成对应的xml文档,我用python写了一个简单的批量生成xml文档的demo,遇见了意外的小问题,记录一下. 报错问题为:ImportError: No m ...

  4. ASP.NET和C#中对XML的操作,以及简单的xml与xsl !

    随着不断的学习,对asp.net c#的了解,越来越觉得xml很好,但是有些还是要和sql联用,并不象有些人夸大说的替代sql了,这里讲讲我自己的用的一些经验. asp.net创建xml就是通过创建D ...

  5. qtp xml联合xsl输出html报表,通过xml和xsl实现数据和页面展示模板的解耦(简单完整网站代码示例)...

    一.示例简介 该示例通过xml配置数据源,在其xsl样式模板中配置数据源的展示模板,从而达到数据和页面模板解耦,降低前端和后端开发的依赖,相比于传统的HTML+CSS的实现页面模板展示,数据和模板解耦 ...

  6. HTML、HTML5、XHTML、XML、XSL、DTD、XML Schema 简单介绍

    在学习 WEB 开发中,我们可能经常搞不清 HTML.HTML5.XHTML.XML.XSL.DTD.XML Schema 的概念,容易将其混为一谈,在网上搜集大量资料后,在此做一下总结. 在介绍上面 ...

  7. XML通过XSL格式化的那点事(XML到自定义节点折叠显示)

    引言 有时我们想看下系统生成的XML文件(如XML格式的Project文件),如果文件结构简单,我们浏览器看起来还比较方便,但是随着XML schema复杂后就变得让人头疼啦,单独写一个程序去做展现又 ...

  8. 使用Apache XML项目FOP生成PDF文件(上)

    使用Apache XML项目FOP生成PDF文件(上) 一.前言:在项目中遇到要把文档保存成PDF文件,在网上找了很久之方面的资料,终于发现了Apache的FOP项目有这个功能. 二.适合读者对象:想 ...

  9. php xml对象解析_php解析xml 的四种简单方法(附实例)

    XML处理是开发过程中经常遇到的,PHP对其也有很丰富的支持,本文只是对其中某几种解析技术做简要说明,包括:Xml parser, SimpleXML, XMLReader, DOMDocument. ...

最新文章

  1. centos 扫毒软件clamAV安装
  2. 洛谷P2068 统计和题解
  3. 3.4_函数_Function_Part_2
  4. 百度坐标转换火星坐标UDF
  5. python中的用法_Python中使用@的理解
  6. Python3之Memcache使用
  7. “图片”--上传(文件上传一致,单文件)
  8. 如何让测试同学理解并发锁
  9. Go语言实现并行分段求和计算
  10. 【移入移出事件练习】【菜单】【选项卡】 -------this使用
  11. camvid数据集使用方法_github资源推荐:目标姿态检测数据集与渲染方法
  12. IEC61850简要介绍
  13. php709,深度爆料评测bt2020与bt709有什么区别?哪个好?良心点评实际情况
  14. 读《大学之路》有感---谈谈书房对于一个家庭的重要性
  15. 【202209秋招软开银行面试C++】
  16. 从来也科技首次入选Gartner RPA魔力象限报告,看国产RPA未来发展
  17. Unity3D脚本中文系列教程(八)
  18. 整理了300个市面上最不常见的springboot计算机毕业设计选题。满满的干货
  19. 性能测试——负载测试、容量测试、极限测试、压力测试
  20. 微信公共号---LBS的开发

热门文章

  1. webhook机器人php源码,webhook机器人
  2. 直接在安装了redis的Linux机器上操作redis数据存储类型--List类型
  3. java-背包的实现
  4. iOS启动页广告XHLaunchAd
  5. Raid Level,该如何为Oracle存储选择才好?
  6. 类模板 templateclass T
  7. WebBrowser提交submit后界面不刷新的解决办法
  8. 分布式共识算法 (Consensus Algorithm)
  9. linux 安卓svn,linux安装svn
  10. kali系统支持那些手机_将kali安装到手机上作为便携式系统启动盘的方法