转至繁体中文版     | 网站首页 | 图文教程 | 资源下载 | 站长博客 | 图片素材 | 武汉seo | 武汉网站优化 | 
最新公告:     敏韬网|教学资源学习资料永久免费分享站!  [mintao  2008年9月2日]        
您现在的位置: 学习笔记 >> 图文教程 >> 站长学院 >> Web开发 >> 正文
使用XPathExpression类对XML进行排序         ★★★★

使用XPathExpression类对XML进行排序

作者:闵涛 文章来源:闵涛的学习笔记 点击数:709 更新时间:2009/4/23 10:51:34

使用XPathExpression类对XML进行排序

net_lover

 如果你曾经使用过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();
 }

 


[Web开发]XML与HTML在语法上的主要区别详解  [系统软件]如何让Expat支持中文XML
[VB.NET程序]vb.net 与 XML 的操作  [VB.NET程序]vb.net读写xml(2)--实现datagrid与xml的沟通(原创…
[VB.NET程序]vb.net 读写xml方法(1)  [VB.NET程序][VB.NET+XML]完成简单程序配置
[VB.NET程序]使用Visual Basic操纵XML文档  [VB.NET程序]XML 简单接口 (SAX2)用Visual Basic 实现的示例
[Delphi程序]Delphi 6 XML映象工具  [Delphi程序]Delphi 6 XML数据绑定
教程录入:mintao    责任编辑:mintao 
  • 上一篇教程:

  • 下一篇教程:
  • 【字体: 】【发表评论】【加入收藏】【告诉好友】【打印此文】【关闭窗口
      注:本站部分文章源于互联网,版权归原作者所有!如有侵权,请原作者与本站联系,本站将立即删除! 本站文章除特别注明外均可转载,但需注明出处! [MinTao学以致用网]
      网友评论:(只显示最新10条。评论内容只代表网友观点,与本站立场无关!)

    同类栏目
    · Web开发  · 网页制作
    · 平面设计  · 网站运营
    · 网站推广  · 搜索优化
    · 建站心得  · 站长故事
    · 互联动态
    更多内容
    热门推荐 更多内容
  • 没有教程
  • 赞助链接
    更多内容
    闵涛博文 更多关于武汉SEO的内容
    500 - 内部服务器错误。

    500 - 内部服务器错误。

    您查找的资源存在问题,因而无法显示。

    | 设为首页 |加入收藏 | 联系站长 | 友情链接 | 版权申明 | 广告服务
    MinTao学以致用网

    Copyright @ 2007-2012 敏韬网(敏而好学,文韬武略--MinTao.Net)(学习笔记) Inc All Rights Reserved.
    闵涛 投放广告、内容合作请Q我! E_mail:admin@mintao.net(欢迎提供学习资源)

    站长:MinTao ICP备案号:鄂ICP备11006601号-18

    闵涛站盟:医药大全-武穴网A打造BCD……
    咸宁网络警察报警平台