对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 以处理默认命名空间。

 相关文章:

在XSLT中实现按日期排序

使用XPathExpression类对XML进行排序

AI应用架构师:用RAG解决大模型“幻觉”问题的客服架构设计 在当今的智能客服领域,大语言模型(LLM)凭借流畅的对话能力和强大的理解能力,逐渐取代传统规则式机器人,成为客服系统的核心。但随之而来的“幻觉”问题(即模型编造不存在的信息)却成了致命伤:比如客户问“你们的产品保修期多久”,AI客服可能会自信地回答“3年”,而实际保修期只有1年——这种错误不仅会误导客户,还可能引发投诉、退货甚至法律风险。 阅读详情

相关推荐

AI智能体升级实战:从规则匹配到Function Call,准确率提升86%的技术选型之路

AI智能体升级实战:从规则匹配到Function Call的技术演进 文章记录了AI邮件助手从传统规则匹配升级到Function Call的技术迭代过程。通过案例分析,揭示了规则匹配的三大核心问题:覆盖不全(用户表达千变万化)、组合困难(多条件容易漏掉)、维护噩梦(每个需求都要新增规则)。测试数据显示,规则匹配在复杂查询中的准确率仅51%,严重影响用户体验。 技术团队对比了三种升级方案:1) 继续优化规则匹配(天花板明显);2) 微调专用NLP模型(成本高);3) 采用Function Call(灵活高效)

yweng18的博客 1079

详解XML节点属性排序

用python实现“对xml节点中的属性进行排序”

ybdesire的专栏 5251

两个独立的正态分布的和仍然为正态分布的证明

正态分布的和

weixin_40064300的博客 1万+

XML排序通用方案

要对整个 XML 文档中的所有标签进行排序,你需要递归地遍历整个文档,然后将节点进行排序。这个示例代码递归地对整个 XML 文档进行了遍历和排序。请注意,处理复杂的 XML 结构可能需要更多的处理和调整,具体取决于你的实际需求。

2301_79510050的博客 776

HTML入门(详细教程),前端入门从这里开始

HTML基础教程,网页框架搭建,表单制作,了解HTML标签的基本用法,每个标签具备哪些属性。

wandertp的博客 1286

手把手教你用CANopen SDO报文控制步进电机(附CIA402协议详解)

本文详细解析了如何通过CANopen SDO报文控制步进电机,深入讲解CIA402协议的核心架构、状态机模型及对象字典管理,并提供实战代码示例。从SDO报文构造到多轴同步控制,帮助开发者掌握工业级步进电机的精确控制技术,适用于自动化设备开发。

weixin_33737774的博客 489

sqlserver2012 无法将一个或多个字符从 XML 转换为目标排序规则

sqlserver2012 无法将一个或多个字符从 XML 转换为目标排序规则问题 aaa是xml字段类型,字段代码231。 因为以前里面没有乱码情况所以没报错,今天报错了找了好多文章都不好用。 我库的排序规则:Chinese_PRC_CI_AS 通过下面方式转换数据 cast(aaa as nvarchar(max)) COLLATE Chinese_PRC_CI_AS ...

tqwer的专栏 1756

12、无人机系统的建模与仿真

本文深入探讨了无人机系统的建模与仿真技术,涵盖其发展需求、历史演变、动力学建模方法、常用参考框架与状态变量表示,并分析了在控制系统设计、操作员培训和子系统测试中的关键应用。文章还介绍了不同类型无人机(固定翼、旋翼、混合翼)在建模与仿真中的差异,提出了多学科融合、高精度实时仿真及VR/AR技术等未来发展趋势,并给出了实际建模与仿真的标准操作流程,为无人机系统的设计与优化提供了全面的技术支持与展望。

websocket5live的博客 198

Mybatis自定义SQL动态排序的实现

1、需求 根据查询列表,条件中可以自定义排序字段和acs desc 2、实现 queryParam public class XxxQueryCondition extends BaseQueryParam { private String name; private Integer status; private Integer level; } /**------------------------------------*/ @Data @AllArgsConstructor

weixin_44329984的博客 4275

mongodb在游戏开发领域的优势

目前游戏服务器使用mysql作为数据库的较多,然而,使用mongodb来作为存储层,在某些方面比mysql更为方便和适合。

littleschemer的博客 1701

手把手教你学Simulink--基于未来出行解决方案的场景实例:电动飞行汽车(eVTOL)的动力系统建模与仿真

电动垂直起降飞行器零道路拥堵:三维空间飞行绿色低碳:全电驱动,零排放快速响应:城市内15分钟直达低噪音:相比直升机↓20dB📊 预测:2030年全球eVTOL市场规模将超300亿美元,中国、美国、欧洲加速适航认证。本文通过,构建了电动飞行汽车(eVTOL)动力系统高压电池系统建模电力电子(DC-DC、逆变器)实现PMSM电机+螺旋桨推进系统搭建完整飞行任务动态仿真性能KPI评估与优化。

MHD0815的博客 444

Mybatis多字段排序

        从前学习Spring开发的时候写过一个Web系统,后端采用Spring+SpringMVC+MyBatis,前端使用BootStrap和LigerUI,业务数据采用LigerUI的LigerGrid进行展示,由于LigerGrid只能支持单字段排序,有些时候业务需要进行多字段排序,刚好也准备重新换一下前端界面效果和框架,最近刚好看了下EasyUI,发现EasyUI是可以支持多字段排...

chenheheyang的博客 1万+

Unity3D 加密 Assembly-CSharp.dll (Android平台) 防止反编译

0、加密的原理 Unity3D 是基于 Mono的,我们平时写的 C# 脚本都被编译到了 Assembly-CSharp.dll ,然后 再由 Mono 来加载、解析、然后执行。 Mono 加载 Assembly-CSharp.dll 的时候就是读取文件到内存中,和平时读取一个 游戏资源 文件没什么区别。 为了防止别人破解,我们会对游戏资源加密,简单点的 比如修改文件的一个字节 或者 位移一下

Circle 8726

elementUI 多字段全部数据排序

elementUI全部数据多字段排序

weixin_42397937的博客 2774

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

华为的C语言编程规范.pdf

华为技术有限公司内部技术规范。本规范制定了编写C语言程序的基本原则、规则和建议。从代码的清晰、简洁、可测试、安全、程序效率、可移植各个方面对C语言编程作出了具体指导。

jdk8多字段排序

背景 最近针对代码改造,由于原有实体类是经过排序的,而改造后,懒得去xml增加排序。因此将排序放在java代码进行。 实现 public class Test { public static void main(String[] args) { List<Student> sList = new ArrayList<Student>(); IntStream.ra...

laosun12的专栏 1606

ssm框架搭建

这个是一个在idea上成功跑起来的ssm框架项目,保存在这里方便以后使用直接下载

基于前端动态配置的多字段排序实现方案,MyBatis 多表联合查询下的动态排序字段拼接

在业务系统中,用户常常希望能根据多个字段动态排序数据,比如按“名称”正序、“频率”倒序等。传统方式通常是写死 SQL 中的 ORDER BY 语句,但这样灵活性差、代码冗余且维护困难。为了解决这个问题,前端提供排序组件让用户自定义排序逻辑,后端再动态拼接 SQL,从而实现可配置、可扩展的字段排序能力。

qq_43511143的博客 1209

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

多字段实现动态排序

多字段实现动态排序

leaning_java的博客 570

关于mysql order by 多字段排序问题

问题1:多字段排序 解决方式:多字段加逗号即可,可两个或两个以上排序 ORDER BY t_spec.`orderby` ASC,t_spec_item.`orderby` ASC 问题2:在mybaiti中使用pageHelper分页插件后,在mapper.xml中写的order by并没有执行。 解决方式:   注意:这里我将orderby字段直接放在了controller层...

Lei_Da_Gou的博客 2360

mybatis 多字段排序_Mybatis SQL如何自定义新的排序字段(我是认为标题是该这么写的)...

只是一个封面哎呀,最近本屌丝也是遇到一个问题,虽然这个需求任务不是分配给我的,但是这个东西我一想啊就很感兴趣,不要问我为什么很感兴趣,因为好吧,一不小心就把我们程序员真正的兴趣给说出来了,所以呢闲暇的时间就偷偷摸摸的弄了一下,等等,别误会,用偷偷摸摸形容并不是说我很猥琐,(虽然我们自称屌丝,但是我们并不是猥琐大叔,我们只是不爱说话!!!)而是解决这个需求的过程中肯定会碰到诸多代码逾越不了的恶心壁垒...

weixin_39747975的博客 612

mybatis逆向工程中的多字段排序问题

在mybatis排序的时候遇到一个问题,那就是两个字段同时排序的时候只执行了最后一个排序的字段 我想要的排序结果是这样的 SELECT * FROM t_project_data ORDER BY confirm_project_status DESC , id ASC 以下是错误代码的演示 TProjectDataExample example = new TProjectDataExample...

cx1006784951的博客 4226
上一篇: Indent,Outdent和hanging indent
下一篇: 天使不敢走的路,傻子一步就能跨过去
java2000_test
博客等级 码龄19年 10粉丝 320原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值