开发者

Sorting XML on the Basis of Numeric Data in Javascript

Can anyone show me how to sort an XML file containing numeric data as well as string data stored in separate tags? For example I have a Charges (numeric) and Network (string) elements. Now I want to sort the XML file on the basis of Charges in Javascript.

any simple examples?

 <Results>
        <network>Wateen</network>
        <speed>2048</speed>
        <type>Fixed</type>
         <install_charges>500</install_charges>
         <charge开发者_高级运维s>20</charges>
    </Results>

   <Results>
        <network>PTCL</network>
        <speed>4096</speed>
        <type>Fixed</type>
       <install_charges>0</install_charges>
       <charges>2000</charges>
   </Results>

   <Results>
        <network>PTCL</network>
        <speed>4096</speed>
        <type>Fixed</type>
       <install_charges>0</install_charges>
       <charges>200</charges>
   </Results>

   <Results>
        <network>PTCL</network>
        <speed>4096</speed>
        <type>Fixed</type>
       <install_charges>0</install_charges>
       <charges>3000</charges>
   </Results>

How do I sort the above XML according to the charges? It will also be nice if it is non-XSL method because XSL give lots of trouble.


If you don't like to use XSL you can make an array containing the Results-elements and use the native sort-method of arrays:

<Results>
        <network>Wateen</network>
        <speed>2048</speed>
        <type>Fixed</type>
         <install_charges>500</install_charges>
         <charges>20</charges>
    </Results>

   <Results>
        <network>PTCL</network>
        <speed>4096</speed>
        <type>Fixed</type>
       <install_charges>0</install_charges>
       <charges>2000</charges>
   </Results>

   <Results>
        <network>PTCL</network>
        <speed>4096</speed>
        <type>Fixed</type>
       <install_charges>0</install_charges>
       <charges>200</charges>
   </Results>

   <Results>
        <network>PTCL</network>
        <speed>4096</speed>
        <type>Fixed</type>
       <install_charges>0</install_charges>
       <charges>3000</charges>
   </Results>
<script>

var nodeArray=[];
var nodeList=document.getElementsByTagName('Results')

//fill array
for(var i=0;i<nodeList.length;++i)
{
  nodeArray.push(nodeList[i]);
}

//sort array
nodeArray.sort(function(a,b)
              {
                return (
                         Number(a.getElementsByTagName('charges')[0].firstChild.data)
                          -
                         Number(b.getElementsByTagName('charges')[0].firstChild.data)
                        );
              });

//reorder nodes
for(var i=nodeArray.length-1;i>=0;i--)
{
  nodeArray[i]
   .parentNode
     .insertBefore(nodeArray[i],
                   nodeArray[i].parentNode.getElementsByTagName('Results')[0]);
}
</script>
0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜