打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
对XML实现自定义、多字段排序
对XML实现自定义、多字段排序 对Xml排序,除了使用XSLT之外,还可以使用XPathExpression类,但这些类一般情况下只支持数字和字符串类型的数据类型排序。要实现按照自己的排序方法排序,需要自己进行定义。AddSort 方法使用户能够按对象的数据类型(而不是按字符串或数字)将对象排序。IComparer 对象提供了 Compare 方法的实现,该实现支持按用户定义的类进行排序。
下面的例子就是实现自定义排序,并且支持多字段排序的一个例子。首先定义一个自定义对象,设置排序规则,然后使用XPathExpression.AddSort (Object, IComparer)方法进行排序。
a.xml文件
<multistatus>
  <response>
    <objectGuid>{E4FCC019-CF62-4CA8-B9DA-184D19B62FBB}</objectGuid>
    <href>/Portal/newpage/100063AF50C.vbs</href>
    <displayname>100063AF50C.vbs</displayname>
    <parentname>/Portal/newpage/</parentname>
    <contentclass>urn:schemas-mengxianhui-cn:webpart</contentclass>
    <getlastmodified>2004-11-05 09:13:58</getlastmodified>
    <Title>新闻页面</Title>
    <Author/> 
  </response>
  <response>
    <objectGuid>{661E575E-92A7-485C-B6B6-123BCE8377FC}</objectGuid>
    <href>/Documents/home/images/shijian.gif</href>
    <displayname>shijian.gif</displayname>
    <contentclass>urn:schemas-mengxianhui-cn:basedocument</contentclass>
    <getlastmodified>2005-10-26 17:03:39</getlastmodified>
    <createtime>9999-10-25 11:57:16</createtime>
    <Title>shijian</Title>
    <Author/>
    <ItemOrder>2</ItemOrder>
  </response>
    <response>
    <objectGuid>{661E575E-92A7-485C-B6B6-123BCE8377FC}</objectGuid>
    <href>/Documents/home/images/shijian.gif</href>
    <displayname>shijian.gif</displayname>
    <contentclass>urn:schemas-mengxianhui-cn:basedocument</contentclass>
    <getlastmodified>2005-10-26 17:03:39</getlastmodified>
    <createtime>2000-10-25 11:57:16</createtime>
    <Title>孟子</Title>
    <Author/>
    <ItemOrder>2</ItemOrder>
  </response>
    <response>
    <objectGuid>{661E575E-92A7-485C-B6B6-123BCE8377FC}</objectGuid>
    <href>/Documents/home/images/shijian.gif</href>
    <displayname>shijian.gif</displayname>
    <contentclass>urn:schemas-mengxianhui-cn:basedocument</contentclass>
    <getlastmodified>2005-10-26 17:03:39</getlastmodified>
    <createtime>2008-10-25 11:57:16</createtime>
    <Title>孟宪会</Title>
    <Author/>
    <ItemOrder>2</ItemOrder>
  </response>
  <response>
    <objectGuid>{C023513E-8877-4D63-8F11-5C1DB5CE6384}</objectGuid>
    <href>/Documents/home/images/jiaoshizhijia.gif</href>
    <displayname>jiaoshizhijia.gif</displayname>
    <contentclass>urn:schemas-mengxianhui-cn:basedocument</contentclass>
    <getlastmodified>2003-10-26 17:03:39</getlastmodified>
    <createtime>2002-10-22 16:38:02</createtime>
    <Title>jiaoshizhijia</Title>
    <ItemOrder>9</ItemOrder>
  </response>
  <response>
    <objectGuid>{836BF9A3-32AE-48A5-B2AC-7525B9CCCEB3}</objectGuid>
    <href>/Documents/home/images/leftbg.gif</href>
    <displayname>leftbg.gif</displayname>
    <contentclass>urn:schemas-mengxianhui-cn:basedocument</contentclass>
    <getlastmodified>2004-10-26 17:03:39</getlastmodified>
    <createtime>2008-10-22 16:04:01</createtime>
    <Title>leftbg</Title>
    <ItemOrder>65</ItemOrder>
    <Author/>
  </response>
  <response>
    <objectGuid>{DECED835-84BC-4F15-860D-658AC14A51AE}</objectGuid>
    <href>/Documents/home/images/zhuce.gif</href>
    <displayname>zhuce.gif</displayname>
    <contentclass>urn:schemas-mengxianhui-cn:basedocument</contentclass>   
    <getlastmodified>2004-10-26 17:03:39</getlastmodified>
    <createtime>2002-10-22 16:01:07</createtime>
    <Title>zhuce</Title>
    <Author/>
    <ItemOrder>32</ItemOrder>
  </response>
  <response>
    <objectGuid>{EF9B16D0-DB39-4034-B02A-B270C0436408}</objectGuid>
    <href>/Documents/home/images/bbs.gif</href>
    <displayname>bbs.gif</displayname>
    <contentclass>urn:schemas-mengxianhui-cn:basedocument</contentclass>   
    <getlastmodified>2004-10-26 17:03:39</getlastmodified>
    <createtime>2005-10-22 16:01:03</createtime>
    <Title>bbs</Title>
    <Author/>
    <ItemOrder>4</ItemOrder>
  </response>
  <response>
    <objectGuid>{E105440A-1F58-41E4-A5A4-1194C09B8728}</objectGuid>
    <href>/Documents/home/images/gonggao.gif</href>
    <displayname>gonggao.gif</displayname>
    <contentclass>urn:schemas-mengxianhui-cn:basedocument</contentclass>   
    <getlastmodified>2004-10-26 17:03:39</getlastmodified>
    <createtime>2003-10-22 15:59:38</createtime>
    <Title>gonggao</Title>
    <Author/>
    <ItemOrder>12</ItemOrder>
  </response>
</multistatus>SortXml.aspx
<%@ Page Language="C#" %>
<script runat="server">
  /// <summary>
  /// 实现自定义排序的比较器,可按升序、降序排序
  /// </summary>
  public class DateTimeSort : System.Collections.IComparer
  {
    private SortType dataSortType;
    public enum SortType { Asc, Desc };
    int System.Collections.IComparer.Compare( Object x, Object y )
    {
      if (dataSortType == SortType.Asc)
      {
        return System.DateTime.Compare(System.Convert.ToDateTime(x), System.Convert.ToDateTime(y));
      }
      else
      {
        return System.DateTime.Compare(System.Convert.ToDateTime(y), System.Convert.ToDateTime(x));
      }
    }
   
    public SortType DataSortType
    {
      set { dataSortType = value; }    
    }
  }
 
  protected void Page_Load( object sender, EventArgs e )
  {
    System.Xml.XPath.XPathDocument xpd = new System.Xml.XPath.XPathDocument(Server.MapPath("~/a.xml"));
    System.Xml.XPath.XPathNavigator xpn = xpd.CreateNavigator();
    System.Xml.XPath.XPathExpression xpe = xpn.Compile("/multistatus/response[position() > 1]/Title");
    //设置排序字段和排序规则
    DateTimeSort dts1 = new DateTimeSort();
    dts1.DataSortType = DateTimeSort.SortType.Asc;
    xpe.AddSort("../getlastmodified", dts1);
    DateTimeSort dts2 = new DateTimeSort();
    dts2.DataSortType = DateTimeSort.SortType.Desc;
    xpe.AddSort("../createtime", dts2);
    System.Xml.XPath.XPathNodeIterator nodeIter = xpn.Select(xpe);
    Response.Write("<table border='0' cellspacing='1' cellpadding='3' style='background:#EEE;width:360px;font-size:12px;'>");
    Response.Write("<tr style='background:#DDD'><td>第一排序字段</td><td>第二排序字段</td><td>标题</td></tr>");
    while (nodeIter.MoveNext())
    {
      Response.Write("<tr style='background:#FFF'><td>" + nodeIter.Current.SelectSingleNode("../getlastmodified").Value + "</td><td>" + nodeIter.Current.SelectSingleNode("../createtime").Value + "</td><td>" + nodeIter.Current.Value + "</td></tr>");
    }
    Response.Write("</table>");
  }
</script>
在使用 AddSort 方法时需要考虑的重要说明:
1.添加排序的顺序提供排序关键字的使用顺序。
2.如果 XPathExpression 或排序关键字需要命名空间解析,则必须使用 SetContext 方法为命名空间解析提供 XmlNamespaceManager。
3.在调用 SetContext 方法时,所有排序规则都被删除。若要保留排序规则,请在调用 AddSort 方法前调用 SetContext 方法。
4.如果 XPathExpression 不包含前缀,则认为命名空间 URI(统一资源标识符)为空命名空间。如果您的 XML 中包含默认命名空间,则仍须使用 SetContext 方法,并提供包含前缀和命名空间 URI 的 XmlNamespaceManager 以处理默认命名空间。

本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/net_lover/archive/2007/09/13/1783974.aspx
本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
tomcat中对客户端的缓存机制
微信公众平台开发(十) 消息回复总结
webdav常用方法和概念总结 - zhangbo443的日志 - 网易博客
简单反射实现SpringMvc中excel导出
100行代码爬取招聘职位数据
微信公众平台教程之C#开发实例
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服