中国IT动力,最新最全的IT技术教程
最新100篇 | 推荐100篇 | 专题100篇 | 排行榜 | 搜索 | 在线API文档 | 网通镜像
首 页 | 程序开发 | 操作系统 | 软件应用 | 图形图象 | 网络应用 | 精文荟萃 | 教育认证 | 硬件维护 | 未整理篇 | 站长教程
ASP JS PHP工程 ASP.NET 网站建设 UML J2EESUN .NET VC VB VFP 网络维护 数据库 DB2 SQL2000 Oracle Mysql
服务器 Win2000 Office C DreamWeaver FireWorks Flash PhotoShop 上网宝典 CorelDraw 协议大全 网络安全 微软认证
硬件维护  CPU  主板  硬盘  内存  显卡  显示器  键盘鼠标  声卡音箱  打印机  机箱电源  BIOS  网卡  C#  Java  Delphi  vs.net2005
  当前位置:> 程序开发 > 编程语言 > .NET > XML/SOAP
使用XPathExpression类对XML进行排序
作者:未知 时间:2003-06-14 12:12 出处:互联网 责编:chinaitpower
              摘要:暂无

如果你曾经使用过XSLT,当你需要对XML文档中的字符串或数字进行排序时,你可能会习惯于使用xsl:sort元素,在进行xsl:for-each进行循环或用xsl:apply-templates调用模板时,这个元素的功能很方便,而且简单。然而,在某些情况下,你只是想简单对XML文档进行简单的排序和显示数据,那么xsl:sort就会大大降低计算机性能,下面就解释一下,如何在不使用xsl:sort元素的情况下,实现对XML数据进行排序。

在.NET平台下,要完成这样的工作非常轻松,我们只需使用System.Xml.XPath名字空间里的几个类即可,如XPathNavigator和XPathExpression。这些类相当于XSLT中XPath的功能,允许你在XML文档中进行遍历,也可以进行排序的操作。下面是对System.Xml.XPath名字空间中的类进行的简单的描述:

XPathDocument:进行XML文档处理时,提供一个快速、有效的、只读的Cache功能,在进行XSLT转换时,推荐使用该类。

XPathException:当处理XPath产生错误时,抛出一个例外。

XPathExpression:保存在调用XPathNavigator的Compile()方法时生成的、经过编译的XPath表达式。

XPathNavigator:提供一个指针模型,供我们读取支持IXPathNavigable接口的所保存的任何类型的数据。

XPathNodeIterator:遍历节点集合。

由于要详细讨论每一个类的细节,超出了我们主题的范围,我们只讨论与排序有关的那些类的使用。首先,我们需要创建一个XPathNavigator对象,以便建立XPath表达式来完成我们的排序功能。由于这个类是一个抽象类,我们不能这样直接创建它:

XPathNavigator nav = new XPathNavigator();

我们必须使用XmlDocument、XmlDataDocument或XPathDocument的CreateNavigator()方法来创建:

XPathDocument doc = new XPathDocument(Server.MapPath("customers.xml")); XPathNavigator nav = doc.CreateNavigator();

创建了XPathNavigator对象后,我们就可以使用Compile()方法编译一个XPath表达式,这个方法返回一个XPathExpression 类,它封装编译过的表达式,同时允许我们进行排序。下面是一个使用XPathNavigator类创建一个编译过的XPath表达式的例子:

XPathExpression exp = nav.Compile(xpath);

我们通过使用XPathExpression对象的AddSort()方法实现排序的功能,这个方法有两个重载的方式:

public abstract void AddSort(object expr, IComparer comparer); public abstract void AddSort( object expr, XmlSortOrder order, XmlCaseOrder caseOrder, string lang, XmlDataType dataType );

第一个方法允许我们使用自定义的排序表达式;第二个方法有5个参数:分别是要排序的对象、排序顺序、条件顺序、语言类别和数据类型,下面就是使用该方法进行排序的例子:

exp.AddSort("text()",XmlSortOrder.Ascending,XmlCaseOrder.None,"",XmlDataType.Text);

一旦我们对XPath表达式添加了排序的功能,我们就可以调用XPathNavigator对象的Select()方法,并把编译过的XPath表达式作为参数,Select()方法返回一个XPathNodeIterator对象,我们可以使用它遍历我们所选择的节点。

下面就是用C#编写的实现排序功能的所有代码:

private void Page_Load(object sender, System.EventArgs e) { StringBuilder unsorted = new StringBuilder(); StringBuilder sorted = new StringBuilder(); string xpath = "/Customers/Customer/ContactName"; XPathDocument doc = new XPathDocument(Server.MapPath("customers.xml")); XPathNavigator nav = doc.CreateNavigator(); XPathNodeIterator nodeIter1 = nav.Select(xpath); while (nodeIter1.MoveNext()) { unsorted.Append(nodeIter1.Current.Value + "<br />"); } this.lblUnsorted.Text = unsorted.ToString(); XPathExpression exp = nav.Compile(xpath); exp.AddSort("text()",XmlSortOrder.Ascending, XmlCaseOrder.None,"",XmlDataType.Text); XPathNodeIterator nodeIter2 = nav.Select(exp); while (nodeIter2.MoveNext()) { sorted.Append(nodeIter2.Current.Value + "<br />"); } this.lblSorted.Text = sorted.ToString(); }
关闭本页
 
首页 | 投资与合作 | 服务条款 | 隐私政策 | 收藏本站 | 设为首页 | 新用户注册 | 免责声明 | 使用帮助
Copyright ©2005-2008 chinaitpower.com All rights reserved. www.chinaitpower.com 版权所有