Welcome

首页 / 软件开发 / C# / C#发现之旅第二讲 C#-XSLT开发

C#发现之旅第二讲 C#-XSLT开发2011-04-27 cnblogs 袁永福为了让大家更深入的了解和使用C#,我们开始这一系列的主题为“C#发现之旅 ”的技术讲座。考虑到各位大多是进行WEB数据库开发的,而所谓发现就是发现我们所 不熟悉的领域,因此本系列讲座内容将是C#在WEB数据库开发以外的应用。目前规划的主要内 容是图形开发和XML开发,并计划编排了多个课程。在未来的C#发现之旅中,我们按照由浅入 深,循序渐进的步骤,一起探索和发现C#的其他未知的领域,更深入的理解和掌握使用C#进 行软件开发,拓宽我们的视野,增强我们的软件开发综合能力。

本课程说明

本课程介绍XPath和XSLT的基本概念,并介绍了如何在C#中使用这些技术。

XPath介绍

XPath是从XML基础规范上派生的技术,专门用于快速检索和查询XML文档,使用方便 ,功能强大,XPath也是XSLT技术的基础。

XPath是W3C国际标准组织定义的用于在单 个XML文档中快速检索和定位XML文档节点的规范,它也是跨平台的,若一些软件支持XPath, 则必然是支持标准的XPath语法。因此无论是JAVA还是C#都是支持相同语法的XPath。

我们理解XPath时可以参考文件目录结构FilePath,在Windows资源管理器左边的文件目录树 状列表中,可以看到各种文件对象,包括磁盘根目录,各级文件目录等等,它们共同构成了 一个树状结构,我们选择对象时既可以在这个树状结构中一个个查找,也可以指定路径名来 进行快速定位,文件系统的路径名采用斜杠号来分隔各个目录层次的目录名。比如在这个示 意图中,我们选中的目录,可以使用路径名”c:documents and settings袁永福 ”来快速定位。

而XML文档中也是这种树状层次结构,因此我们也可以套用这种 文件路径名的概念到XML文档中,于是形成了XPath路径。我们处理XML文档时可以一层层查找 所需的XML节点,也可以指定XPath路径字符串来快速定位XML节点。在XPath路径中,我们使 用反斜杠符号来分隔各个层次的XML元素的名称。

在文件目录系统中,我们可以可以 使用绝对路径名,也可以使用相对路径名,我们可以使用一个点号表示当前目录,使用两个 点表示父目录。在XPath中我们也套用了类似的概念,我们从XML文档根节点出发而指定的 XPath路径为绝对路径,从某个XML节点开始转到其它节点所经过的路径为相对路径,我们也 使用一个点表示当前节点,也使用两个点来表示父节点。其实我们可以将绝对路径看成从根 节点出发的相对路径。

在这个示意图中,第一个选中的节点可以使用XPath路径 “Table/Record/Country”来快速定位。

在文件目录系统中,同一个目录 下面不能有相同名称的对象,因此相对路径名和绝对路径名都能准确的定位到一个目录上, 而在XML文档中,同一个XML节点下可以存在多个具有相同名称的子节点,因此XPath路径可能 无法唯一的确定一个XML节点。此时XPath采用了内嵌条件判断语句的方法来解决这个问题。 XPath路径字符串中可以使用一对方括号来包含一个逻辑表达式,在这个表达式中可以使用字 符串判断,数学四则运算,逻辑判断和一些预定义函数,而且XPath路径中每个层次都能包含 表格式,因此XPath的逻辑判断的功能是非常强大的。

在示意图中,我们使用XPath路 径”Table/Record[CustomerID=’ANATR’]/Phone”来快速定位第二 个节点,此处使用了一段方括弧包含了一个逻辑表达式。表示查找某个节点,该节点下的 CustoemrID子节点的文本值等于 “ANATR”。

XPath是一种国际标准,但 在微软的.NET框架当然支持这个国际标准。我们可以使用.NET类库中的 System.Xml.Xsl.XslTransform类型来执行XSLT转换。这个类型除了支持标准的XPath外,还 进行一些扩展,主要是能扩展使用开发者自己定义的函数。

使用XPath,我们可以很 方便的搜索XML文档中的任何部分,因此具有很好的数据检索分析功能,近期业界兴起的半结 构化文档技术大多就是以XPath为基础的。

由于XPath技术是相当强的,而且是国际标 准,跨平台的,因此大家有时间好好学习使用它。对于XPath的详细语法可访问网站 http://www.w3.org/TR/xpath ,若大家安装了MSDN2003版,也可参考 MSDN Library/XML Web Services/XML核心/SDK 文档/MSXML4.0 SDK/XPath Reference。这些电子文档全是英文 ,大家也可以购买一些专门讲述XML技术的中文书籍看看。