为了让大家更深入的了解和使用C#我们开始这一系列的主题为C#发现之旅的技术讲座考虑到各位大多是进行WEB数据库开发的而所谓发现就是发现我们所不熟悉的领域因此本系列讲座内容将是C#在WEB数据库开发以外的应用目前规划的主要内容是图形开发和XML开发并计划编排了多个课程在未来的C#发现之旅中我们按照由浅入深循序渐进的步骤一起探索和发现C#的其他未知的领域更深入的理解和掌握使用C#进行软件开发拓宽我们的视野增强我们的软件开发综合能力
本系列课程配套的演示代码下载地址为 _discoveryzip
本课程说明
本课程介绍XPath和XSLT的基本概念并介绍了如何在C#中使用这些技术
XPath介绍
XPath是从XML基础规范上派生的技术专门用于快速检索和查询XML文档使用方便功能强大XPath也是XSLT技术的基础
XPath是WC国际标准组织定义的用于在单个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类库中的SystemXmlXslXslTransform类型来执行XSLT转换这个类型除了支持标准的XPath外还进行一些扩展主要是能扩展使用开发者自己定义的函数
使用XPath我们可以很方便的搜索XML文档中的任何部分因此具有很好的数据检索分析功能近期业界兴起的半结构化文档技术大多就是以XPath为基础的
由于XPath技术是相当强的而且是国际标准跨平台的因此大家有时间好好学习使用它对于XPath的详细语法可访问网站 若大家安装了MSDN版也可参考 MSDN Library/XML Web Services/XML核心/SDK 文档/MSXML SDK/XPath Reference这些电子文档全是英文大家也可以购买一些专门讲述XML技术的中文书籍看看