XSLT学习笔记--NET Framework对XSLT的支持(1)
前言
这几日在网上发现了国产开源博客—X3BLOG,很不错的说,没理由不支持国产货。使用了XML+XSLT+AJAX技术,很感兴趣啊!大家有兴趣的可以访问这个网站:
XSLT是什么东西啊?怎么从来没听说过!马上先学学,呵呵!ASP.NET控件先放一边,等把周边技术搞清楚了再弄它吧。不过在搜索引擎中查找跟XSLT相关的东西实在少得可怜,有一个网站不错,如果有兴趣可以先看看这个网站(http://www.w3school.com.cn/ ),此网站很爽,很强大,里面有XSLT教程,看着舒服,很快看完,对此技术有了一个初步的了解,终于知道有这么个东西比CSS强大很多。美中不足的是只介绍了XSLT1.0。看完后再到网上搜“ASP.NET XSLT”,晕,实在少得可怜,看样子此技术在国内并不流行。没办法,用外国搜索引擎搜,哈哈,收获颇丰。
慢慢学,慢慢翻译。在此留下学习笔记。
.NET Framework对XSLT的支持
原作者: Jayram Tallamraju 翻译:阿巴睇
概览
XSLT是一个优秀的技术,它使得XML变得更强大。XSLT像其他编程语言一样也是和种语言。它是把一种数据结构转换为另一种数据结构的语言,它并不适合于实现商业逻辑。这意味着把现在编程语言跟XSLT结合起来会变得更为强大。某些时候有可能脱离XSLT而使用XML DOM,但这种解决方案在很多数据/文档转换中跟使用XSLT进行对比并无优势。
本文只聚焦于.NET对XSLT的支持和在.NET Framework中使用XSLT的功能。我推荐所有人在进行数据转换时都考虑使用XSLT。当某些应用程序使用了很多的XML是,XSLT极有可能成为使应用程序变得优雅而高效的途径。
本文并不打算完整而详细地讲述XSLT,这些在Internet上你可以找到足够多的资料,关于这一点请查看参考资料这一节中所提到的书和相关链接。
.NET对XSLT的支持
.NET Framework中的System.Xml.Xsl命名空间中的类库提供了对XSLT的支持。当使用XSLT1.0时推荐使用XslTranform类。XslTranform是.NET中处理XSLT的引擎。我相信XslTranform完全是使用.NET Framework而不是使用MSXML来实现的。至少我没有在XslTranform或.NET Framewrok文档中看见任何关于MSXML的引用。
XSLT和XSL
XSL刚开始的目标是给XML文档提供表现和格式化的支持。它现在已经发展为转换和格式化对象。它分为XSLT(XSL Transformations)和XSL-FO(XSL Formatting objects)。大多数网页仅仅使用XSLT来表现。本文将不涉及XSL-FOR的内容。
XSLT不仅仅用于表现
XSLT不仅仅是另一个样式表语言(如CSS)而用于在web上表现XML。在现实中,XSLT有很多的用途,最常见的用途之一是web上把XML文档转换为HTML页面。更多时候它用于将表现为数据分离。
在很多场合下,XSLT都非常有用。如应用程序可以把多个XML文档合并为一个XML文档,或把不同格式的输入数据格式化转化为一个统一的数据格式以使得指定的应用程序可以处理它们。
当下,XML已经XslTranform成为一种标准数据,不同的应用程序产生出不同格式的XML数据,需要把这些不同的格式进行转换,而这些使用XSLT就非常容易办到。
XSLT在.net中的例子
下面是3个在.net和ASP.NET中使用XSLT的简单例子。你可以在参考资料这一节中获得更详细的资料。这些例子的代码没有提供单独下载,因为它太小,已经完全显示在每个表现在每个例子之中。
1. 简单的XSLT:
1.a XML示例代码:让我们来看一个简单的关于员工名称的XML文件。我们希望在web上列出这个XML文件中的所有员工的名字,并希望使用XSLT来实现这个功能。
<Employee ID="1" Name="Sid" />
<Employee ID="2" Name="Bob" />
<Employee ID="3" Name="Rao" />
<Employee ID="4" Name="Jack" />
<Employee ID="5" Name="David" />
</PrakashFinancial>
1.b XSLT示例代码:下列XSL文件将列出上面的XML文件中所有的员工名称,并放置一个“List of employees”标题。
<xsl:output method="html" encoding="utf-8" />
<xsl:template match="/PrakashFinancial">
<xsl:text>
List of Employees :
</xsl:text>
<xsl:apply-templates/>
</xsl:template>
<xsl:template match="/PrakashFinancial/Employee">
<xsl:value-of select="@Name"/>
</xsl:template>
</xsl:stylesheet>
1.c 进行转换
using System.Xml.Xsl;
XslTransform oTf = new XslTransform();
oTf.Load("specify XSL file");
oTf.Transform("Input XML file","Output File");
1.d 输出
本例将输出如下HTML:
List of Employees : Sid Bob Rao Jack David
注意:很明显,上面的例子类似于“Hello wrold”。它仅仅对.net中的XSLT提供了一个快速预览。
以下为译者注:
狂晕!做的第一个XSLT例子就碰上交待得这么不清不楚的文章。让我痛恨!没办法,我来把它交待得清楚些吧!
1、 先弄一虚拟目录(这里不再哆嗦),在下面新建一“employee.xml”文件,拷贝1.a的代码进去并保存。
2、 再建一“employee.xslt”文件,拷贝1.b的代码进去并保存。
3、 再建一“text.aspx”文件,输入如下代码并保存:
<script language="c#" runat="server">
void Page_Load()
{
XslTransform oTf = new XslTransform();
oTf.Load(MapPath("employee.xslt"));
oTf.Transform(MapPath("employee.xml"), MapPath("aa.html"));
}
</script>
<html>
<head><title>把xml转换为html</title></head>
<body>
<h1>快到虚拟目录下看看是否生成了aa.html文件!</h1>
</body>
</html>
在浏览器中运行test.aspx,如果运行成功,到虚拟目录下看看是否生成了aa.html文件。用词本打开看看里面有什么代码!
OK,总算有些成果,累!休息!