XML节点排序的一种方法

4 篇文章 0 订阅

XML节点排序的一种方法

前几天遇到了将XML按节点属性排序后输出的需求,开始想用C#写一个WinFrom应用程序实现,后来没怎么弄明白,后来看网上说XSL有排序的功能,就试了试,结果真的满足需求了,方法还很简单。

思路是用XSL将现有的XML文档转换为成排序后的格式,然后将结果另存为新的XML。

排序前的XML:

<? xml version="1.0" encoding="utf-8" ?>
< xxmx >
  
< options  id ="2" >
    
< option  lable ="请选择"  value ="" />
    
< option  lable ="或有负债"  value ="8" />
    
< option  lable ="长期负债"  value ="7" />
    
< option  lable ="流动负债"  value ="6" />
    
< option  lable ="无形动产"  value ="5" />
    
< option  lable ="无形不动产"  value ="4" />
    
< option  lable ="不动产"  value ="3" />
    
< option  lable ="有形动产"  value ="2" />
    
< option  lable ="财务资产"  value ="1" />
  
</ options >
  
< options  id ="10" >
    
< option  lable ="请选择"  value ="" />
    
< option  lable ="文件"  value ="9" />
    
< option  lable ="自定义选择"  value ="8" />
    
< option  lable ="从库中选择"  value ="7" />
    
< option  lable ="密码域"  value ="6" />
    
< option  lable ="文本区域"  value ="5" />
    
< option  lable ="单选域"  value ="4" />
    
< option  lable ="单选域(手工)"  value ="41" />
    
< option  lable ="复选域"  value ="3" />
    
< option  lable ="选择域"  value ="2" />
    
< option  lable ="文本字段"  value ="1" />
    
< option  lable ="隐藏域"  value ="99" />
    
< option  lable ="从库中复选域"  value ="32" />
    
< option  lable ="自定复选域"  value ="31" />
    
< option  lable ="选择域(可选)"  value ="21" />
    
< option  lable ="选择域(手工)"  value ="22" />
  
</ options >
</ xxmx >


下面是XSL的代码:
test.xsl
<? xml version="1.0" ?>
< xsl:stylesheet  xmlns:xsl ="http://www.w3.org/1999/XSL/Transform"  version ="1.0" >
< xsl:template  match ="/" >
  
< html >
    
< title >
      排序后文件
    
</ title >
    
< body >
      
<![CDATA[ <?xml version="1.0" encoding="utf-8"?> ]]>
      
< br />
      
<![CDATA[ <xxmx> ]]>
      
< br />
      
< xsl:for-each  select ="/xxmx/options" >
        
<![CDATA[ <options id=" ]]> < xsl:value-of  select ="@id" /> <![CDATA[ "> ]]> < br />
        
< xsl:for-each  select ="option" >
          
< xsl:sort  data-type ="number"  order ="ascending"  select ="@value" />
          
<![CDATA[ <option lable =" ]]> < xsl:value-of  select ="@lable" /> <![CDATA[ " value =" ]]> < xsl:value-of  select ="@value"   /> <![CDATA[ "/> ]]>
          
< br />
        
</ xsl:for-each >
        
<![CDATA[ </options> ]]>
        
< br />
      
</ xsl:for-each >
      
<![CDATA[ </xxmx> ]]>
    
</ body >
  
</ html >
</ xsl:template >
</ xsl:stylesheet >

将XML和XSL放在一个文件夹里,然后在XML的第二行加上一句:
<? xml-stylesheet type="text/xsl" href="test.xsl" ?>

这样XML就会按照XSL里的约束显示了,打开XML文件(我用的是IE,6、7皆可)。

下面就是排序后的XML:
<? xml version="1.0" encoding="utf-8" ?>
< xxmx >
< options  id ="2" >
< option  lable  ="请选择"  value  ="" />
< option  lable  ="财务资产"  value  ="1" />
< option  lable  ="有形动产"  value  ="2" />
< option  lable  ="不动产"  value  ="3" />
< option  lable  ="无形不动产"  value  ="4" />
< option  lable  ="无形动产"  value  ="5" />
< option  lable  ="流动负债"  value  ="6" />
< option  lable  ="长期负债"  value  ="7" />
< option  lable  ="或有负债"  value  ="8" />
</ options >
< options  id ="10" >
< option  lable  ="请选择"  value  ="" />
< option  lable  ="文本字段"  value  ="1" />
< option  lable  ="选择域"  value  ="2" />
< option  lable  ="复选域"  value  ="3" />
< option  lable  ="单选域"  value  ="4" />
< option  lable  ="文本区域"  value  ="5" />
< option  lable  ="密码域"  value  ="6" />
< option  lable  ="从库中选择"  value  ="7" />
< option  lable  ="自定义选择"  value  ="8" />
< option  lable  ="文件"  value  ="9" />
< option  lable  ="选择域(可选)"  value  ="21" />
< option  lable  ="选择域(手工)"  value  ="22" />
< option  lable  ="自定复选域"  value  ="31" />
< option  lable  ="从库中复选域"  value  ="32" />
< option  lable  ="单选域(手工)"  value  ="41" />
< option  lable  ="隐藏域"  value  ="99" />
</ options >
</ xxmx >

另存为一个新的XML,排序就完成了。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值