xml排序

来源:互联网 发布:大数据岗位要求 编辑:程序博客网 时间:2024/05/15 02:07

1 xsl:sort

所使用的名字空间:xmlns:xsl='http://www.w3.org/1999/XSL/Transform'

Syntax

<xsl:sort

select="expression"

lang="language-code"

data-type="text|number|qname"     //数据类型,可支持按数字排序

order="ascending|descending"       //排序升序,降序

case-order="upper-first|lower-first"/>

 

test1.xml
<?xml version="1.0" encoding="GB2312"?>
<?xml-stylesheet type="text/xsl" href="test1.xsl"?>
<source>
<name>John</name> 
<name>Josua</name> 
<name>Charles</name> 
<name>Alice</name> 
<name>Martha</name> 
<name>George</name> 
</source>

test.xsl

<xsl:stylesheet version = '1.0' 
     
xmlns:xsl='http://www.w3.org/1999/XSL/Transform'>

<xsl:template match="/"> 
     
<TABLE> 
      
<xsl:for-each select="//name"> 
       
<xsl:sort order="ascending" select="."/> 
           
<TR> <TH><xsl:value-of select="."/></TH> </TR> 
      
</xsl:for-each> 
     
</TABLE> 
</xsl:template>
</xsl:stylesheet>

2 for-each的属性ordey-by

所使用的名字空间:xmlns:xsl="http://www.w3.org/TR/WD-xsl"

Syntax

<xsl:for-each select="expression"> 

<!-- Content:(xsl:sort*,template) -->

</xsl:for-each>

示例:test.html

<html><head>  
<script>  
var  sig=true  
function  sort(strKey)  
{  
var  xml1=mxhxml.XMLDocument  
var  xsl1=mxhxsl.XMLDocument  
var  s1=xsl1.selectSingleNode("//xsl:for-each/@order-by")  
if(s1.value==strKey)  s1.value="-"  +  strKey  
else  
s1.value
=strKey  
document.all.mxh.innerHTML
=xml1.transformNode(xsl1)  
}
  
</script>  
</head>  
<body  onload="sort('Name')">  
<div  id=mxh></div>  
<XML  id=mxhxsl>  
<?xml  version="1.0"?>  
<xsl:stylesheet  xmlns:xsl="http://www.w3.org/TR/WD-xsl">  
   
<xsl:template  match="/">  
   点击标题排序:  
       
<table  border="2">  
           
<tr>  
               
<th  onclick="sort('Name')"  style="cursor:hand">名称</th>  
               
<th  onclick="sort('Email')"  style="cursor:hand">电子邮件</th>  
           
</tr>  
           
<xsl:for-each  select="/Custs/Cust"  order-by="Name">  
               
<tr>  
                   
<td><xsl:value-of  select="Name"/></td>  
                   
<td><xsl:value-of  select="Email"/></td>  
               
</tr>  
           
</xsl:for-each>  
       
</table>  
   
</xsl:template>  
</xsl:stylesheet>  
</XML>  
 
<XML  id=mxhxml>  
<?xml  version="1.0"?>  
<Custs>  
 
<Cust>  
       
<Name>Nancy</Name>  
       
<Email>www@yahoo.com</Email>  
   
</Cust>  
   
<Cust>  
       
<Name>Peter</Name>  
       
<Email>dotnet@aol.com</Email>  
   
</Cust>  
   
<Cust>  
       
<Name>Rachel</Name>  
       
<Email>billgates@microsoft.com</Email>  
   
</Cust>  
   
<Cust>  
       
<Name>Seth</Name>  
       
<Email>flying@yous.net</Email>  
   
</Cust>  
</Custs>  
</XML>  

 

3 按数字进行排序

1)xsl:sort方式: 只需指定datatype="number"

2)ordey-by方式:只需指定ordey-by=number("结点")

3)另外,还需对脚本进行修改:

<script type="text/javascript">

function taxis(x) 

{ 

    //获取到xml,xsl文档,获取到node: selectSingleNode

    if(x == '指定要排序的数字元素')

       sortField.value='number('+x+')';

    else

       sortField.value=x;

    if (this.rel == '+')

    {

       this.rel = '-';

    }

    else

    {

       sortField.value = '-'+sortField.value;

       this.rel = '+';

    }

    //transformNode

}

</script>

原创粉丝点击