C#对XSLT的支持Part I

概览XSLT是一个优秀的技术,它使得XML变得更强大。XSLT像其他编程语言一样也是和种语言。它是把一种数据结构转换为另一种数据结构的语言,它并不适合于实现商业逻辑。这意味着把现在编程语言跟XSLT结合起来会变得更为强大。某些时候有可能脱离XSLT而使用XML DOM,但这种解决方案在很多数据/文档转换中跟使用XSLT进行对比并无优势。
本文只聚焦于.NETXSLT的支持和在.NET Framework中使用XSLT的功能。我推荐所有人在进行数据转换时都考虑使用XSLT。当某些应用程序使用了很多的XML是,XSLT极有可能成为使应用程序变得优雅而高效的途径。
本文并不打算完整而详细地讲述XSLT,这些在Internet上你可以找到足够多的资料,关于这一点请查看参考资料这一节中所提到的书和相关链接。
.NETXSLT的支持.NET Framework中的System.Xml.Xsl命名空间中的类库提供了对XSLT的支持。当使用XSLT1.0时推荐使用XslTranform类。XslTranform.NET中处理XSLT的引擎。我相信XslTranform完全是使用.NET Framework而不是使用MSXML来实现的。至少我没有在XslTranform.NET Framewrok文档中看见任何关于MSXML的引用。
XSLTXSLXSL刚开始的目标是给XML文档提供表现和格式化的支持。它现在已经发展为转换和格式化对象。它分为XSLTXSL Transformations)和XSL-FOXSL Formatting objects)。大多数网页仅仅使用XSLT来表现。本文将不涉及XSL-FOR的内容。
XSLT不仅仅用于表现XSLT不仅仅是另一个样式表语言(如CSS)而用于在web上表现XML。在现实中,XSLT有很多的用途,最常见的用途之一是web上把XML文档转换为HTML页面。更多时候它用于将表现为数据分离。
在很多场合下,XSLT都非常有用。如应用程序可以把多个XML文档合并为一个XML文档,或把不同格式的输入数据格式化转化为一个统一的数据格式以使得指定的应用程序可以处理它们。
当下,XML已经XslTranform成为一种标准数据,不同的应用程序产生出不同格式的XML数据,需要把这些不同的格式进行转换,而这些使用XSLT就非常容易办到。
XSLT.net中的例子下面是3个在.netASP.NET中使用XSLT的简单例子。你可以在参考资料这一节中获得更详细的资料。这些例子的代码没有提供单独下载,因为它太小,已经完全显示在每个表现在每个例子之中。
1.
简单的XSLT1.a XML示例代码:让我们来看一个简单的关于员工名称的XML文件。我们希望在web上列出这个XML文件中的所有员工的名字,并希望使用XSLT来实现这个功能。
<PrakashFinancial>
     
<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:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
<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
进行转换
// Simplified C# code - Showing only code that is important
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”文件,输入如下代码并保存:
<%@ Import namespace="System.Xml.Xsl"
%>
<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>

共有0个回答