为了让大家更深入的了解和使用C#,我们开始这一系列的主题为“C#发现之旅”的技术讲座。考虑到各位大多是进行WEB数据库开发的,而所谓发现就是发现我们所不熟悉的领域,因此本系列讲座内容将是C#在WEB数据库开发以外的应用。
目前规划的主要内容是图形开发和XML开发,并计划编排了多个课程。在未来的C#发现之旅中,我们按照由浅入深,循序渐进的步骤,一起探索和发现C#的其他未知的领域,更深入的理解和掌握使用C#进行软件开发,拓宽我们的视野,增强我们的软件开发综合能力。本系列课程配套的演示代码下载地址为 http://www.cnblogs.com/Files/xdesigner/cs_discovery.zip 。
本课程说明
本课程介绍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技术的中文书籍看看。
相关专题
- Wlan组网----家庭专题 (4354篇文章)
- 用C#生成不重复的随机数 (141次浏览)
- 在C#.net中操作XML实例 (98次浏览)
- C#中Hashtable Dictionary的使用方法探索 (83次浏览)
- C#与数据结构 (77次浏览)
- C# .Net中的类型转换 (77次浏览)
- 提供个C#实现文件下载代码 (70次浏览)
- C#打开WORD文档内容并显示 (69次浏览)
- C#事件(event)解析 (61次浏览)
- c# 反射的使用方法 (61次浏览)
- 一个C#写的调用外部进程类 (59次浏览)



