热烈祝贺台州朗动科技的站长论坛隆重上线!(2012-05-28)    热烈庆祝伟大的祖国60周年生日 点击进来我们一起为她祝福吧(2009-09-26)    站长论坛禁止发布广告,一经发现立即删除。谢谢各位合作!.(2009-08-08)    热烈祝贺台州网址导航全面升级,全新版本上线!希望各位一如既往地支持台州网址导航的发展.(2009-03-28)    台州站长论坛恭祝各位新年快乐,牛年行大运!(2009-01-24)    台州Link正式更名为台州网址导航,专业做以台州网址为主的网址导航!(2008-05-23)    热烈祝贺台州Link资讯改名为中国站长资讯!希望在以后日子里得到大家的大力支持和帮助!(2008-04-10)    热烈祝贺台州Link论坛改名为台州站长论坛!希望大家继续支持和鼓励!(2008-04-10)    台州站长论坛原[社会琐碎]版块更名为[生活百科]版块!(2007-09-05)    特此通知:新台州站长论坛的数据信息全部升级成功!">特此通知:新台州站长论坛的数据信息全部升级成功!(2007-09-01)    台州站长论坛对未通过验证的会员进行合理的清除,请您谅解(2007-08-30)    台州网址导航|上网导航诚邀世界各地的网站友情链接和友谊联盟,共同引领网站导航、前进!(2007-08-30)    禁止发广告之类的帖,已发现立即删除!(2007-08-30)    希望各位上传与下载有用资源和最新信息(2007-08-30)    热烈祝贺台州站长论坛全面升级成功,全新上线!(2007-08-30)    
便民网址导航,轻松网上冲浪。
台州维博网络专业开发网站门户平台系统
您当前的位置: 首页 » HTML/XHTML/XML编程 » XSLT 2.0应用实践

XSLT 2.0应用实践

论坛链接
  • XSLT 2.0应用实践
  • 发布时间:2007-10-11 14:37:45    浏览数:7551    发布者:superadmin    设置字体【   
现在, XSLT 2.0 已经不再只是一个理论上的标准了,有很多免费软件都可以帮助您发挥出 XSLT 2.0 的力量,借助这些软件您可以在软件开发中应用 XSLT 2.0 。这篇文章将向您介绍如何使用这些软件来应用 XSLT2.0 。

几周以前,我收到一位朋友的来信,提到了几年前我开发的软件,在这个软件中我使用了 XSL 样式表,我以前曾经写过文章讲解样式表的使用方法。现在,我的这位朋友将要利用 XSLT2.0 的新特色对样式表进行升级,这引起了我的兴趣。

令人惊讶的是,我以前并没有考虑过样式表本身,而是在考虑如何应用样式表。这是因为原来的软件是用 C# 写的,现在很多开发者都在等待微软发布最新版本的 MSXML 来支持最新的标准,因为纸面上的标准是没有任何价值的,除非有实际的工作实例作为参考。

如果您曾经为美国专利局工作过,那么按照这种思路进行思考:发布一种没有人知道怎么进行构建的产品专利有什么意义呢?实际上,除非您向风险投资 推销雾件或 标记技术领域的专利,空有想法只能做到这种程度了,那么下面让我们来看看如何在实际工作中使用 XSLT2.0 。

软件资源

现在有很多现成的工具可以选择,首先,您需要微软的 Visual C# Express 来编写 .NET 代码,但是微软并没有提供 XSLT 的处理器,因此我们需要从 Altova 获取 XSLT 的处理工具。 Altova 是 XMLSpy 以及很多 XML 相关产品的软件生产商。

且慢,先不用拿出您的支票本,我们所使用的来自 Altova 的软件是免费的—— AltovaXML 2007 ,该产品包含了 XML 检验工具、 XSLT1.0 处理器、 XSLT2.0 处理器和 XQuery 处理器。我们最感兴趣的部分是 XSLT2.0 的处理功能,而微软的 MSXML 中恰好没有提供 XSLT2.0 的支持。

关于微软 Visual C# Express 的安装可以参考以前的技术文章,这里就不再重复了,我们来介绍介绍 AltovaXML 2007 的安装,其实该过程也很简单,点击了安装文件并按照提示前进就可以了,图片 A 和 B 展示了您在安装过程中会看到的安装屏幕截图。

图片 A ——安装过程


图片 B ——安装过程的其他部分

      在安装了 AltovaXML 2007 之后,使用 XSLT2.0 起来也很简单,只需要添加一个引用即可,如图片 C 所示。

图片 C ——添加一个引用


现在预备知识已经讲解完了,我们现在来创建一个 C# 程序,列表 A 是 XML 文档,列表 B 是 XSLT 文档,列表 C 是我们使用的 C# 程序代码。

列表 A —— XML 文档

<?xml version="1.0" encoding="UTF-8"?>

< world >

<country name="Canada" continent="North America">

< city> Toronto</city>

< city> Vancouver</city>

</country>

<country name="Jamaica" continent="North America">

< city> Kingston</city>

< city> Ocho Rios</city>

</country>

<country name="United States" continent="North America">

< city> Allentown</city>

< city> Mobile</city>

</country>

<country name="United Kingdom" continent="Europe">

< city> London</city>

< city> Dundee</city>

</country>

<country name="France" continent="Europe">

< city> Paris</city>

< city> Nice</city>

</country>

<country name="Japan" continent="Asia">

< city> Tokyo</city>

< city> Osaka</city>

</country>

</world>

列表 B —— XSLT2.0 样式表

<?xml version="1.0" encoding="UTF-8"?>

< xsl:stylesheet version="2.0"xmlns:xsl="http://www.w3.org/1999/XSL/Transform"xmlns:fo="

http://www.w3.org/1999/XSL/Format"xmlns:xs="http://www.w3.org/2001/XMLSchema"xmlns:fn="

http://www.w3.org/2005/xpath-functions"xmlns:xdt="http://www.w3.org/2005/xpath-datatypes">

< xsl :template match="/">

< xsl :element name="world">

< xsl :for -each-group select="//country" group-by="@continent">

< xsl :sort select="@continent" data-type="text" order="ascending"/>

< xsl :variable name="continent" select="@continent"/>

< xsl :apply -templates select="//country[@continent = $continent]" mode="group">

< xsl :sort select="@name" data-type="text" order="ascending"/>

</ xsl :apply -templates>

</ xsl :for -each-group>

</ xsl :element >

</ xsl :template >

< xsl :template match="*" mode="group">

< xsl :copy -of select="."/>

</ xsl :template >

</ xsl :stylesheet >
      列表 C —— C# 程序

using System;

using System.Collections.Generic ;

using System.ComponentModel ;

using System.Data ;

using System.Drawing ;

using System.Text ;

using System.Windows.Forms ;

namespace WindowsApplication1

{

publicpartialclassForm1 : Form

{

public Form1()

{

InitializeComponent ( );

}

privatevoid Form1_Load(object sender, EventArgs e)

{

AltovaXMLLib.ApplicationClass objAltova = new AltovaXMLLib.ApplicationClass ( );

textBox1.Text = Application.StartupPath + " .. ..world2.xml";

textBox2.Text = Application.StartupPath + " .. ..grouping2.xsl";

objAltova.XSLT2.InputXMLFileName = textBox1.Text;

objAltova.XSLT2.XSLFileName = textBox2.Text;

textBox3.Text = objAltova.XSLT2.ExecuteAndGetResultAsString( );

}

}

}

示例

在以上的代码中,我突出强调了这篇文章的主题——使用 AltovaXML 2007 的 XSLT2.0 功能。表 A 展示了应用到 XSLT2.0 的方法,表 B 展示了适用的属性。

表 A ——方法

方法
说明

Execute
对当前 XML 文档应用 XSL 样式表,并将结果写入程序提供的文件。

AddExternalParameter
在 XSL 样式表上添加一个参数值。

ClearExternalParameterList
清除所有 XSL 样式表参数。

ExecuteAndGetResultAsString
对当前 XML 文档应用 XSL 样式表,并返回结果字符串。


表 B ——属性

方法
说明

InputXMLFileName
设定需要转换的 XML 文件名。

InputXMLFromText
从字符串获取 需要转换的 XML 文件名。

LastErrorMessage
最后的错误信息字符串。

XSLFileName
设定 XSLT 样式表的文件名。

XSLFromText
从字符串获取样式表的文件名。

XSLStackSize
样式表中允许的最大递归深度,默认是是 1000 ,最小值是 100.


结果

应用以上所有的技术,我们得到的结果看上去应当和图片 D 差不多。

图片 D ——结果


下一步如何开展

这个例子已经显示出 XSLT2.0 已经具备实际应用的价值了,尽管这个例子本身平淡无奇,但是通过免费资源,我们已经可以很好地利用 XSLT2.0 的强大功能了。

但是在真正的商业环境中,您可能需要购买一些相关的参考资料, Michael Kay 的 XSLT 2.0 Programmer's Reference ( XSLT2.0 程序员参考指南)是一个不错的选择;另外,您可能还要花些钱在 XMLSpy 的完整版本上,不过放心,在真正的应用软件上, XMLSpy 所发挥出的功能是值得您进行投资的。
娱乐休闲专区A 影视预告B 音乐咖啡C 英语阶梯D 生活百科
网页编程专区E AMPZF HTMLG CSSH JSI ASPJ PHPK JSPL MySQLM AJAX
Linux技术区 N 系统管理O 服务器架设P 网络/硬件Q 编程序开发R 内核/嵌入
管理中心专区S 发布网址T 版主议事U 事务处理