在Javascript中基于数值数据对XML进行排序

时间:2010-12-14 09:13:04

标签: javascript xml

有人能告诉我如何对包含数字数据的XML文件以及存储在单独标签中的字符串数据进行排序吗?例如,我有一个Charges(数字)和Network(字符串)元素。现在我想根据Javascript中的Charges对XML文件进行排序。

任何简单的例子?

 <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>

如何根据charges对上述XML进行排序?如果它是非XSL方法也会很好,因为XSL会给你带来很多麻烦。

1 个答案:

答案 0 :(得分:0)

如果您不喜欢使用XSL,可以创建一个包含Results-elements的数组,并使用数组的本机排序方法:

<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>